熊猫圈分组

时间:2020-03-21 08:32:39

标签: pandas filter merge

我有数据 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)],但想使其自动化而不提及组合

1 个答案:

答案 0 :(得分:0)

我认为第二个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