让熊猫发现缺失值并显示它们

时间:2018-12-28 19:19:54

标签: python 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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您可以找到设置差异

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}