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

我还是个初学者,所以不要硬判断。我想知道如何解决这个问题,而不是从你那里得到完整的代码。


我有一个具有以下格式的数据库,大约有 9000 行


Location Supplier  Product Price   

NY         GG-10    70      $5  

NY         GG-10    7A      $4   

NY         GG-10    80      $6  

NY         GG-10    8A      $8

TX         GX-05    70      $1

TX         GX-05    80      $3

TN         CX-01    70      $4

TN         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 8A

Location  Supplier    

  NY       GG-10    1   1  1  1

  TX       GG-05    1   0  1  0 

  TN       CX-01    1   1  0  0


慕侠2389804
浏览 222回答 2
2回答

三国纷争

你可以找到集差product = [ '70', '7A', '80', '8A']df.groupby('Supplier').Product.apply(lambda x: set(product).difference(set(x)))SupplierCX-01    {80, 8A}GG-10          {}GX-05    {7A, 8A}

阿晨1998

尝试使用crosstab,频率显示为 0 表示丢失,然后我们可以使用dot将它们组合到单元格中s=pd.crosstab(df.Supplier,df.Product)s.eq(0).dot(s.columns+',').str[:-1]Out[669]: SupplierCX-01    80,8AGG-10          # blank here means nothing missing GX-05    7A,8Adtype: 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 sOut[671]: Location  SupplierNY        GG-10            TN        CX-01       80,8ATX        GX-05       7A,8Adtype: object
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python