如何在新列中获取所有唯一值

时间:2018-07-17 13:47:26

标签: python pandas dataframe group-by

我有一个熊猫数据框,如下所示。

DF_Old =

id    tID       word   rA     rB
12    1         A      N      N
12    2         B      O      N
12    2         B      H      O
12    2         B      O      O
12    2         B      N      H

wordtID列中,rA中具有相同rB的每个词都是具有不同值的相同词。我想创建一个新列R,其中包括列rArB中的所有唯一值,如下所示。

DF_New =

id    tID       word     R
12    1         A        N
12    2         B        O,N,H

我该怎么做?

1 个答案:

答案 0 :(得分:3)

使用groupby,每个组用numpy.ravel展平,用/numpy.unique获取唯一值,并在必要时最后使用join

df = (df.groupby(['id','tID','word'])
       .apply(lambda x: ', '.join(np.unique(x.values.ravel())))
       .reset_index(name='R'))
print (df)
   id  tID word        R
0  12    1    A        N
1  12    2    B  H, N, O

另一个具有meltdrop_duplicates的解决方案,仅保留join个值:

df = df.melt(['id','tID','word'], value_name='R').drop_duplicates(['id','tID','word', 'R'])
df = df.groupby(['id','tID','word'])['R'].apply(', '.join).reset_index()
print (df)
   id  tID word        R
0  12    1    A        N
1  12    2    B  O, H, N