我有一个包含4列的pandas数据框:
Col1 Col2 Col3 Col4
A1 B1 C1 X1
A2 B2 C2 X2
A3 B3 C3 X3
A1 B1 C1 X4
A4 B4 C4 X5
A3 B3 C3 X6
我想识别col1,col2和col3中具有相同值的行,然后在其对应的col4中连接这些值。所以输出就像:
Col1 Col2 Col3 Col4
A1 B1 C1 X1, X4
A2 B2 C2 X2
A3 B3 C3 X3, X6
A1 B1 C1 X4, X1
A4 B4 C4 X5
A3 B3 C3 X6, X3
数据框的最终形状与原始数据框相同。如果你有人能指出我正确的方向,那就太棒了。感谢
答案 0 :(得分:0)
a = (df
.groupby(['Col1', 'Col2', 'Col3'])['Col4']
.apply(lambda x: ', '.join(sorted(x)))
)
b = (df
.groupby(['Col1', 'Col2', 'Col3'])['Col4']
.apply(lambda x: ', '.join(sorted(x, reverse=True)))
)
pd.concat([a, b]).drop_duplicates().reset_index()
输出:
Col1 Col2 Col3 Col4
0 A1 B1 C1 X1, X4
1 A2 B2 C2 X2
2 A3 B3 C3 X3, X6
3 A4 B4 C4 X5
4 A1 B1 C1 X4, X1
5 A3 B3 C3 X6, X3
答案 1 :(得分:0)
使用transform而不是apply或agg。
df['Col4'] = df.groupby(['Col1', 'Col2', 'Col3']).transform(lambda x: ', '.join(x.tolist()))
Col1 Col2 Col3 Col4
0 A1 B1 C1 X1, X4
1 A2 B2 C2 X2
2 A3 B3 C3 X3, X6
3 A1 B1 C1 X1, X4
4 A4 B4 C4 X5
5 A3 B3 C3 X3, X6