首页 > 解决方案 > 让 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

标签: pythonpandas

解决方案


尝试使用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

推荐阅读