为了账号安全,请及时绑定邮箱和手机立即绑定

让 Pandas 找到缺失值并显示出来

让 Pandas 找到缺失值并显示出来

慕侠2389804 2021-09-28 14:31:20
我还是个初学者,所以不要硬判断。我想知道如何解决这个问题,而不是从你那里得到完整的代码。我有一个具有以下格式的数据库,大约有 9000 行Location Supplier  Product Price   NY         GG-10    70      $5  NY         GG-10    7A      $4   NY         GG-10    80      $6  NY         GG-10    8A      $8TX         GX-05    70      $1TX         GX-05    80      $3TN         CX-01    70      $4TN         CX-01    7A      $5我已将此数据框上传到我的 Pandas 项目,现在试图弄清楚如何让 python 显示哪些项目缺少价格。例如,供应商 GG-10 具有所有 4 个项目 (70,7A,80,8A) 的定价。GX-05 只有 2 件(70,80)的定价,但缺少 7A 和 8A。CX-01 缺少 80 和 8A。所以基本上我需要一个数据框来告诉我哪些供应商-产品组合缺少价格。正如您可能理解的那样,只有 4 种产品 - 70、7A、80、8A。我想自己编写代码,但如果有人可以给我一个提示如何解决这个问题,那就太好了!手动完成这项工作会让我永远更新输出。出于某种原因,.dot 没有将列包装到一个单元格中           Product  70 7A 80 8ALocation  Supplier      NY       GG-10    1   1  1  1  TX       GG-05    1   0  1  0   TN       CX-01    1   1  0  0
查看完整描述

2 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

你可以找到集差


product = [ '70', '7A', '80', '8A']

df.groupby('Supplier').Product.apply(lambda x: set(product).difference(set(x)))


Supplier

CX-01    {80, 8A}

GG-10          {}

GX-05    {7A, 8A}


查看完整回答
反对 回复 2021-09-28
?
阿晨1998

TA贡献2037条经验 获得超6个赞

尝试使用crosstab,频率显示为 0 表示丢失,然后我们可以使用dot将它们组合到单元格中


s=pd.crosstab(df.Supplier,df.Product)

s.eq(0).dot(s.columns+',').str[:-1]

Out[669]: 

Supplier

CX-01    80,8A

GG-10          # blank here means nothing missing 

GX-05    7A,8A

dtype: object

更新:更新原因见OP评论


s=pd.crosstab([df.Location ,df.Supplier],df.Product)

s.eq(0).dot(s.columns+',').str[:-1] # here need to assign it back 

s=s.eq(0).dot(s.columns+',').str[:-1] # adding this line 

s

Out[671]: 

Location  Supplier

NY        GG-10            

TN        CX-01       80,8A

TX        GX-05       7A,8A

dtype: object


查看完整回答
反对 回复 2021-09-28
  • 2 回答
  • 0 关注
  • 219 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信