如何在Pandas数据框中返回共享逗号值的组?

时间:2018-07-17 15:04:42

标签: python pandas dataframe pandas-groupby

我的数据框看起来像这样:

df:
Col1 Col2
A     123
B     154
A     123
C     199
A     201
B     199
C     123

如果,我按Col1分组,那么我想显示所有共享Col2共有值的组。

当前输出如下:

123  [A,C,A]
199  [B,C]

但是,如果有重复的'col1',它应该总是从列表中删除它。因此,输出应类似于:

123  [A,C]
199  [B,C]

在这里,重复值A仅在删除重复项时显示一次。

2 个答案:

答案 0 :(得分:1)

您可以先groupby col2

df.groupby('Col2').Col1.apply(list).loc[lambda x : x.str.len()>1]
Out[350]: 
Col2
123    [A, C]
199    [C, B]
Name: Col1, dtype: object

答案 1 :(得分:0)

如果只希望过滤映射到多个字母的值,则可以使用pd.Series.duplicated,后跟groupby

res = df.loc[df['Col2'].duplicated(keep=False)]\
        .groupby('Col2')['Col1'].apply(list)

print(res)

Col2
123    [A, C]
199    [C, B]
Name: Col1, dtype: object