Pandas 合并并完成具有相同 ID 的行

Pandas Merge and Complete rows with same id

这是我的数据框的摘录:

ID LU MA ME JE VE SA DI
200 B B B
201 C C C C C
211 A
211 D D D
211 B
213 A A
216 K K K K
216 K
217 B B B B B

我有一些相同的行 ID 并且想在完成它们时将它们“合并”成一行。 这是我想要的结果的示例:

ID LU MA ME JE VE SA DI
200 B B B
201 C C C C C
211 A D D D B
213 A A
216 K K K K K
217 B B B B B

我是 pandas 数据帧的新手,尝试使用 drop_duplicates 方法,但由于 keep 参数的限制,我需要一些不同的方法。 数据框也按 ID 排序。

如果每组只有一个非空值,使用:

df = df.replace('',np.nan).groupby('ID', as_index=False).first().fillna('')

如果可能有多个值并且需要原始顺序中的唯一值,请使用 lambda 函数:

print (df)
    ID LU MA ME JE VE SA DI
0  201  B     C  B         
1  201  C  C  C  B  C    


f = lambda x: ','.join(dict.fromkeys(x.dropna()).keys())
df = df.replace('',np.nan).groupby('ID', as_index=False).agg(f)
print (df)
    ID   LU MA ME JE VE SA DI
0  201  B,C  C  C  B  C      

这可以被视为一个支点。你需要先融化 df 然后旋转:

(df.melt(id_vars='ID')
   .dropna()
   .pivot(index='ID',columns='variable',values='value')
   .fillna('')
   .rename_axis(None, axis=1)
   .reset_index()
)