Pandas Dataframe -比较值并查找每行中的不匹配?[已关闭]

o7jaxewo  于 2023-03-06  发布在  其他
关注(0)|答案(1)|浏览(119)

**已关闭。**此问题需要debugging details。当前不接受答案。

编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
3天前关闭。
Improve this question
我有一个产品价格的df,它具有以下列:SKU、Amazon、eBay、Walmart、PS、SPL(值可以为空)或该SKU的价格。
我想比较PS和SPL,如果它们是非空的,那么每行的价格应该匹配。这意味着,不匹配是一个错误的SKU。
亚马逊,易趣,沃尔玛也是一样。任何空的或匹配的价格都可以接受。
我对数据框没有太多的了解。我可以在电子表格中这样做,比如添加一个帮助列,其中包含Amazon、eBay和Walmart的最大值或最小值。然后将每个值与该最大值或最小值进行比较。如果所有值都匹配,则为良好,如果不匹配,则为错误SKU
查找错误SKU的便捷方法是什么?有没有人能解释一下这些步骤?
提前感谢:)

nkkqxpd9

nkkqxpd91#

一个简单的方法是这样做:

import pandas as pd

df = pd.DataFrame({'SKU': ['1001', '1002', '1003', '1004'], 
                   'Amazon': [10, 20, 30, None],
                   'eBay': [10, 30, 40, None],
                   'Walmart': [None, 20, 30, 40],
                   'PS': [10, None, 30, 40],
                   'SPL': [20, None, 30, 40]})

df['max_min_price'] = df[['Amazon', 'eBay', 'Walmart']].apply(lambda x: x.dropna().max() if len(x.dropna())>0 else None, axis=1)
df['PS_SPL_error'] = df.apply(lambda x: 'Error' if (x['PS'] is not None and x['SPL'] is not None and x['PS'] != x['SPL']) else 'OK', axis=1)
df['Amazon_eBay_Walmart_error'] = df.apply(lambda x: 'Error' if (x['Amazon'] is not None and x['eBay'] is not None and x['Walmart'] is not None and x['max_min_price'] is not None and x['max_min_price'] != x['Amazon'] and x['max_min_price'] != x['eBay'] and x['max_min_price'] != x['Walmart']) else 'OK', axis=1)
df['Overall_error'] = df.apply(lambda x: 'Error' if (x['PS_SPL_error'] == 'Error' or x['Amazon_eBay_Walmart_error'] == 'Error') else 'OK', axis=1)

print(df)

这就给了你

SKU  Amazon  eBay  Walmart    PS   SPL  max_min_price PS_SPL_error  \
0  1001    10.0  10.0      NaN  10.0  20.0           10.0        Error   
1  1002    20.0  30.0     20.0   NaN   NaN           30.0        Error   
2  1003    30.0  40.0     30.0  30.0  30.0           40.0           OK   
3  1004     NaN   NaN     40.0  40.0  40.0           40.0           OK   

  Amazon_eBay_Walmart_error Overall_error  
0                        OK         Error  
1                        OK         Error  
2                        OK            OK  
3                        OK            OK

相关问题