gpt4 book ai didi

python - 我如何同时比较不同数据框中的两列?

转载 作者:行者123 更新时间:2023-12-01 00:28:54 25 4
gpt4 key购买 nike

我有两个数据帧,我试图比较两列(Cat1 和 Cat2),并且 Cat1 和 Cat2 相同,我想对 Prc 列中的值求和

因此,在下面的示例中,满足条件的唯一两行是 df[0] 的第 0 行和第 4 行,它们满足 df[1] 的第 1 行和第 4 行,因此在这种情况下,总和将为df[0] 为 200,df[1] 为 185

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][ 中的 Cat1 与 df[1] ,但如果这就是我所做的全部,那么我会选择 df[0] 中的第 3 行,即使 df[ 中的 Cat2 不同0]和d[1]

如何同时比较不同数据帧中的两列?

这些是每个 500,000 行 x 32 列的大型数据帧,因此我想避免创建新的数据帧或新列。

最佳答案

一个想法是使用DataFrame.merge对于多列的交集,使用 Prcsum 过滤列:

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

关于python - 我如何同时比较不同数据框中的两列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58336123/

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