python - 如何迭代一个数据帧的每个元素并将元素与另一个数据帧进行比较,然后找到匹配的概率
问题描述
我有两个示例数据框:
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 。关于如何修复它的任何建议?或者任何更有效的方法来找到概率?
谢谢!
解决方案
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
推荐阅读
- c# - C# 仅当列表中存在列名时才从 CSV 文件中读取列
- wordpress - WooCommerce“产品类别列表”小部件似乎无法从可用小部件列表中选择
- flutter - 提供导航功能后对话框不消失
- lua - 如何在 LUA 5.1 Touchosc 中使用变量
- python - 我在 VS Code 中使用相同的 py 文件来学习不同的示例。为什么我删除并编写不同的代码后它仍然运行第一块代码?
- java - java JFrame更新调整窗口大小,但不是自己
- django - Django DRF ModelSerializer 错误验证关系字段我得到字段是必需的,但所有字段在请求数据中都有值
- c - linux C程序中对“函数”的未定义引用
- java - 我正在用java编写一个函数,它将第一个字符放在第三位,只要单词是,它每三个字符重复一次
- reactjs - 如何更改图表中的图例文本颜色