gpt4 book ai didi

Python:如何找到匹配的数据条目并在两个数据集之间执行高效计算

转载 作者:行者123 更新时间:2023-12-01 08:33:17 34 4
gpt4 key购买 nike

例如,我有两个以 Pandas 数据帧形式存储的数据集,如下所示:

Data1:
C1 C2
"Peter" "kiwi"
"John" "banana"
"Susan" "peach"
"Joe" "apple"

Data2:
C3 C4
"apple" 4
"banana" 7
"apple" 4

我想首先缓存两个 Pandas 数据帧之间匹配数据条目的索引。这部分不计入我的运行时分析中,最好预先计算以便稍后进行更有效的哈希查找。

例如期望的输出

 {banana: [1]      (banana from Data1 matches with row 1 in Data2)
apple: [0,2]} (apple from Data1 matches with row 0 & 2 in Data2)

然后,对于 data1 中的每一行,我想对找到的所有匹配项的 Data2[C4] 值进行求和。更具体地说,我希望计算结果如下:

"Peter":  0 (no match for "kiwi")
"John": 7 (one match for "banana", it's just 7)
"Susan": 0 (no match for "peach")
"Joe": 8 (two matches for "apple", they're 4+4)

有没有一种好方法可以使用 pandas dataframe 或 numpy 有效地完成此任务?又名使用计算字典的中间步骤来帮助提高稍后求和的速度。

注意:

第一个任务可以通过类似的方法来完成

Data1.reset_index().groupby('C3')['index'].apply(list).loc[Data0.C2.unique()]

第二个任务可以通过类似的方法来完成

Data0['W'] = Data0['C2'].map(Data1.set_index('C3', append=True)) \
.sum(level=1)['C4']).fillna(0)

但不确定如何利用第一部分中使用的工作来帮助第二部分的计算。

最佳答案

我认为一个好方法是在 data2 上应用 groupbysum,然后将生成的 Series 映射到数据1:

data1['matches'] = data1.C2.map(data2.groupby('C3')['C4'].sum()).fillna(0)
>>> data1
C1 C2 matches
0 Peter kiwi 0.0
1 John banana 7.0
2 Susan peach 0.0
3 Joe apple 8.0

关于Python:如何找到匹配的数据条目并在两个数据集之间执行高效计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53841084/

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