首页 > 解决方案 > 熊猫循环 groupby

问题描述

我有一个数据 df1

 Col1  Col2  Col3 Col4
 12     10   R1    0.1
 12     10   R2    0.1
 12      8   R3    0.6
 11      4   R4    0.2
 12      10  R5    0.4
 11      4   R6    0.1

df2 是 df1 的子集

col 1 col 2 count 
12     10     3
12     8      1
11     4      2

我想要将 df2 的 col1 和 col2 与 df1 匹配的行的输出,从而为 df2 中的每个组合自动化。

对于 df2 中 12 ,10 的组合,我想要匹配 df1 中的行

col 1 col2 col3 col 4 
12     10   R1   0.1  
12     10   R2   0.1
12     10   R5   0.4    

同样,我想为 df2 (12,8) 中的下一个组合创建一个循环

Col 1 col 2  col 3  col 4 
12     8      R3     0.6

同样,我想为 df2 (11,4) 中的下一个组合创建一个循环

Col 1 col 2  col 3  col 4 
11     4      R4     0.2
11     4      R6     0.1  

我试过这个 df3=df1[(df1.Col1 == 12.0)&(df1.Col2 == 10)] 但想自动化它而不提及组合

标签: pandasfiltermerge

解决方案


我认为你第二个是没有必要的,只循环和列DataFrame中唯一值的每个组合:Col1Col2

for i, g in df1.groupby(['Col1','Col2']):
    print (i)
    print (g)

如果想为 DataFrame 的字典提供更多动态解决方案:

d = {f'{i[0]}_{i[1]}':g for i, g in df1.groupby(['Col1','Col2'])}
print (d)
{'11_4':    Col1  Col2 Col3  Col4
3    11     4   R4   0.2
5    11     4   R6   0.1, '12_8':    Col1  Col2 Col3  Col4
2    12     8   R3   0.6, '12_10':    Col1  Col2 Col3  Col4
0    12    10   R1   0.1
1    12    10   R2   0.1
4    12    10   R5   0.4}

print (d['11_4'])
   Col1  Col2 Col3  Col4
3    11     4   R4   0.2
5    11     4   R6   0.1

推荐阅读