gpt4 book ai didi

python - 有没有一种有效的方法来比较两个不同大小的数据帧?

转载 作者:行者123 更新时间:2023-12-05 02:37:52 24 4
gpt4 key购买 nike

我找到了这篇文章,但这不是我的场景。 Is there an efficient way of comparing two data frames

我想比较两个数据框的原因是我正在寻找可能发生的变化。 (想想“审计”)。这两个框架具有完全相同的列布局,只是一个框架的行数可能比另一个框架多或少,并且其中两列的值可能发生了变化。

       ID       Period          Price       OtherID
0 10100001 2019-10-01 8995.00 ABBD
1 38730001 2019-11-01 38227.71 EIRU
2 30100453 2019-12-01 22307.00 DDHF
3 92835543 2020-01-01 2310.00 DDGF
4 66453422 2020-02-01 12113.29 DGFH


ID Period Price OtherID
0 10100001 2019-10-01 5.00 ABBD
1 38730001 2019-11-01 38227.71 XXXX
2 30100453 2019-12-01 22307.00 DDHF
3 92835543 2020-01-01 2310.00 DDGF
4 66453422 2020-02-01 12113.29 DGFH
5 22223422 2020-02-01 123.29 HHYG

我怀疑的两列是“Price”和“OtherID”。我想查找 Price 或 OtherID 的任何更改。

我看到三种情况:

1. row has been added
2. row has been deleted
3. row doesn't match

我可以遍历所有内容,但我想知道是否有一些 pandas 魔法可以一举完成。

我寻求的输出是这样的:

       ID       Period         Analysis
0 10100001 2019-10-01 Changed
1 38730001 2019-11-01 Changed
3 22223422 2020-02-01 New

需要说明的是,ID 本身并不是唯一的。 Period 本身也不是唯一的。两者合起来就是。

最佳答案

mergeIDPeriod 上使用 compare:

out = pd.merge(df1, df2, on=['ID', 'Period'], how='outer',
suffixes=('_df1', '_df2')).set_index(['ID', 'Period'])

out.columns = pd.MultiIndex.from_tuples(out.columns.str.split('_').map(tuple)) \
.swaplevel()

out = out['df1'].compare(out['df2'])

输出:

>>> out
Price OtherID
self other self other
ID Period
10100001 2019-10-01 8995.0 5.00 NaN NaN
38730001 2019-11-01 NaN NaN EIRU XXXX
22223422 2020-02-01 NaN 123.29 NaN HHYG

# Summarize
>>> out.swaplevel(axis=1)['self'].isna().all(axis=1) \
.replace({True: 'New', False: 'Changed'})
ID Period
10100001 2019-10-01 Changed
38730001 2019-11-01 Changed
22223422 2020-02-01 New
dtype: object

如果附加 keep_shape=True 参数:

>>> out['df1'].compare(out['df2'], keep_shape=True)
Price OtherID
self other self other
ID Period
10100001 2019-10-01 8995.0 5.00 NaN NaN
38730001 2019-11-01 NaN NaN EIRU XXXX
30100453 2019-12-01 NaN NaN NaN NaN
92835543 2020-01-01 NaN NaN NaN NaN
66453422 2020-02-01 NaN NaN NaN NaN
22223422 2020-02-01 NaN 123.29 NaN HHYG

关于python - 有没有一种有效的方法来比较两个不同大小的数据帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69876148/

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