python - 我如何寻求同时比较不同数据框中的两列?
问题描述
我有两个数据框,我试图比较两列(Cat1 和 Cat2),并且 Cat1 和 Cat2 相同,我想对 Prc 列中的值求和
因此,在下面的示例中,满足条件的唯一两行是 df[0] 的第 0 行和第 4 行,它们满足 df[1] 的第 1 行和第 4 行,因此在这种情况下,df 的总和为 200 [0] 和 185 用于 df[1]
df[0]
Cat1 Cat2 Cat3 Prc
0 11 0 5 100
1 22 2 9 150
2 33 1 8 50
3 44 2 6 200
4 55 1 8 100
df[1]
Cat1 Cat2 Cat3 Prc
0 66 1 6 120
1 11 0 5 90
2 44 1 6 185
3 77 2 7 145
4 55 1 5 95
我可以使用 .isin 比较 df[0][ 与 df[1] 中的 Cat1,但如果这就是我所做的一切,那么即使 Cat2 在 df[0] 中不同,我也会选择 df[0] 中的第 3 行d[1]
我如何寻求同时比较不同数据框中的两列?
这些是 500,000 行 x 32 列的大型数据框,所以我想避免创建新的数据框或新列。
解决方案
一种想法是DataFrame.merge
用于多个列的交集,使用Prc
and过滤列sum
:
df1 = df[0].merge(df[1], on=['Cat1','Cat2'], suffixes=('_0','_1'))
print (df1)
Cat1 Cat2 Cat3_0 Prc_0 Cat3_1 Prc_1
0 11 0 5 100 5 90
1 55 1 8 100 5 95
print (df1.filter(like='Prc').sum())
Prc_0 200
Prc_1 185
dtype: int64
另一个想法是MultiIndex
通过列与DataFrame.set_index
和Index.isin
过滤相交boolean indexing
:
s1 = df[0].set_index(['Cat1','Cat2'])['Prc']
s2 = df[1].set_index(['Cat1','Cat2'])['Prc']
print (s1[s1.index.isin(s2.index)].sum())
200
print (s2[s2.index.isin(s1.index)].sum())
185
推荐阅读
- javascript - SyntaxError:bcrypt 模块的意外标识符
- r - 如何在 r 中使用 tidy-model 对数据进行反规范化
- google-workspace - 无法在 Cloud DNS 中编辑域
- c# - 如何在 Unity3D 中更准确地编辑框碰撞器?
- truncate - 在 Clickhouse 中的集群上截断表
- angular - 为 Angular 子路由添加 scrollPositionRestoration
- android - 无法将 Ionic cordova 构建到 Android 应用程序
- python - 从 Tensorflow 1.x 到 Tensorflow 2.1.0
- java - Spring Cloud 断路器 - 如何控制打开的 http 状态电路
- javascript - 如何使用javascript将表的值插入另一个表