首页 > 解决方案 > 如何迭代一个数据帧的每个元素并将元素与另一个数据帧进行比较,然后找到匹配的概率

问题描述

我有两个示例数据框:

df1 = pd.DataFrame()
df1['a1'] = ['ABC','ACC','BCC','ABC']
df1['b1'] = ['ACC','AAC','BAC','ACC']

df2 = pd.DataFrame()
df2['a2'] = ['ACC','BCC','ABC']
df2['b2'] = ['AAC','BAC','ACC']
df2['types'] = [t1,t2,t3]
>>> df2
    a2   b2  types
0  ACC  AAC     t1
1  BCC  BAC     t2
2  ABC  ACC     t3

>>> df1
    a1   a2
0  ABC  ACC
1  ACC  AAC
2  BCC  BAC
3  CCC  CAC

我想从 df1 中取一行并遍历 df2 寻找匹配项。如果a1匹配a2 AND b1匹配b2,那么我想计算类型以计算每种类型的概率。比如df1的第一行,它匹配df2的第三行,所以我算t3+1。当有更多数据时,我想找到一种有效的方法

我试过了:

for ind in df1:
    compare_item1= df1['a1'][ind]
    compare_item2 = df1['b1'][ind]
    for i in df2:
        count = 0
        if compare_item1 == df2['a2'][i] and compare_item2 == df2['b2'][i]:
            df1['t_{}'.format(i)]= count+1

我的想法是,对于每次迭代,创建一个虚拟变量 t_i,然后我可以进行计数和进一步计算。但是,我没有得到预期的带有虚拟变量的 df1 。关于如何修复它的任何建议?或者任何更有效的方法来找到概率?

谢谢!

标签: pythonpandasdataframe

解决方案


IIUC 用途:

df = df1.merge(df2, left_on=['a1','b1'], right_on=['a2','b2'])
    
print (df)
    a1   b1   a2   b2 types
0  ABC  ACC  ABC  ACC    t3
1  ABC  ACC  ABC  ACC    t3
2  ACC  AAC  ACC  AAC    t1
3  BCC  BAC  BCC  BAC    t2

df = df.groupby(['a1','b1','types']).size().reset_index(name='count')
print (df)
        a1   b1 types  count
0  ABC  ACC    t3      2
1  ACC  AAC    t1      1
2  BCC  BAC    t2      1

推荐阅读