Pandas l oop groupby - PullRequest
       8

Pandas l oop groupby

1 голос
/ 21 марта 2020

У меня есть данные 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

Я хочу выводить строки, совпадающие с col1 и col2 из df2 с df1.и тем самым автоматизировать для каждой комбинации в df2.

Для комбинации 12, 10 в df2 я хочу соответствующие строки в df1

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

аналогично, я хочу создать al oop для следующей комбинации в df2 (12,8)

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

аналогично, я хочу создать al oop для следующей комбинации в 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 голосов
/ 21 марта 2020

Думаю, вам второй DataFrame не нужен, только l oop по каждой комбинации уникальных значений в столбцах Col1 и Col2:

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

Если хотите больше динамич c решение для словари 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
...