найти повторяющуюся строку после группировки на основе двух столбцов панд - PullRequest
1 голос
/ 29 сентября 2019

Я хочу сгруппировать на основе col1 и col2 и найти повторяющиеся строки на основе col2 между группами.

input

 col1            col2         col3
    A               0            2.0
    A               0            1.0
    A               0            3.0
    A               1            3.0
    A               1            4.0
    A               3            9.0
    B               0            3.0
    B               1            1.0
    B               1            1.0
    B               2            3.0
    C               2            4.0
    C               3            5.0
    C               1            6.0
    C               1            2.0
    C               4            3.0

Ожидаемый результат:

0 in A , B
1 in A , B , C
2 in B , C
3 in A , C
4 in C

Ответы [ 3 ]

2 голосов
/ 30 сентября 2019

Попробуйте GroupBy.unique и объедините строки после:

df.groupby('col2')['col1'].unique().str.join(', ')

col2
0       A, B
1    A, B, C
2       B, C
3       A, C
4          C
Name: col1, dtype: object

(df.groupby('col2')['col1']
   .unique()
   .str.join(', ')
   .to_frame()
   .apply(lambda x: f'{x.name} in {x[0]}', axis=1))

col2
0       0 in A, B
1    1 in A, B, C
2       2 in B, C
3       3 in A, C
4          4 in C
dtype: object
0 голосов
/ 24 октября 2019
d = df.groupby("col2").agg({"col1":"sum"}).reset_index(level=0)

d['col1'] = d['col1'].apply(set).str.join(',')
print(d)
0 голосов
/ 30 сентября 2019

Вы можете сделать это следующим образом:

aggregated=df.groupby(['col2']).agg({'col1': 'unique'})

Вывод будет выглядеть так:

col2           
0        [A, B]
1     [A, B, C]
2        [B, C]
3        [A, C]
4           [C]

И если вы хотите отформатировать его, как в вашем примере, вы можете выполнить:

aggregated.reset_index().apply('{0.col2} in {0.col1}'.format, axis='columns')

Так это выглядит так:

0        0 in ['A' 'B']
1    1 in ['A' 'B' 'C']
2        2 in ['B' 'C']
3        3 in ['A' 'C']
4            4 in ['C']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...