我有一个熊猫数据框,如下所示。
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
在word
和tID
列中,rA
中具有相同rB
的每个词都是具有不同值的相同词。我想创建一个新列R
,其中包括列rA
和rB
中的所有唯一值,如下所示。
DF_New =
id tID word R
12 1 A N
12 2 B O,N,H
我该怎么做?
答案 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
另一个具有melt
和drop_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