gpt4 book ai didi

python - 如何比较两个 Pandas DataFrame 并显示 DataFrame 2 中的差异

转载 作者:行者123 更新时间:2023-11-28 21:35:35 24 4
gpt4 key购买 nike

我目前有两个 pandas 数据框:

sales = [{'account': 'Jones LLC', 'Jan': 150, 'Feb': 200, 'Mar': 140},
{'account': 'Alpha Co', 'Jan': 200, 'Feb': 210, 'Mar': 215}]
sales2 = [{'account': 'Jones LLC', 'Jan': 150, 'Feb': 200, 'Mar': 140},
{'account': 'Alpha Co', 'Jan': 200, 'Feb': 210, 'Mar': 215},
{'account': 'Blue Inc', 'Jan': 50, 'Feb': 90, 'Mar': 95 }]
test_1 = pd.DataFrame(sales)
test_2 = pd.DataFrame(sales2)

我想要实现的是仅显示“test_2”中的差异,而不显示“test_1”中的差异。

我当前拥有的代码连接了两个数据帧,并显示了两个数据帧之间的总差异,但是我只想查看“test_2”与“test_1”之间的差异,而不是相反:

def compare_dataframes(df1, df2):

print 'Comparing dataframes...'
df = pd.concat([df1, df2])
df = df.reset_index(drop=True)
df_gpby = df.groupby(list(df.columns))
idx = [x[0] for x in df_gpby.groups.values() if len(x) == 1]
compared_data = df.reindex(idx)
if len(compared_data) > 1:
print 'No new sales on site!'
else:
print 'New sales on site!'
print(compared_data)

我怎样才能使我当前的功能适应这样的工作?

最佳答案

使用merge带有外部连接和 indicator 参数:

df = test_1.merge(test_2, how='outer', indicator=True)
print (df)
Feb Jan Mar account _merge
0 200 150 140 Jones LLC both
1 210 200 215 Alpha Co both
2 90 50 95 Blue Inc right_only

然后按 boolean indexing 仅过滤 right_only 行:

only2 = df[df['_merge'] == 'right_only']
print (only2)
Feb Jan Mar account _merge
2 90 50 95 Blue Inc right_only

感谢 @Jon Clements 提供带有回调的单行解决方案:

only2 = test_1.merge(test_2, how='outer', indicator=True)[lambda r: r._merge == 'right_only']
print (only2)
Feb Jan Mar account _merge
2 90 50 95 Blue Inc right_only

或者使用query :

only2 = test_1.merge(test_2, how='outer', indicator=True).query("_merge == 'right_only'")

关于python - 如何比较两个 Pandas DataFrame 并显示 DataFrame 2 中的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52092078/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com