如何在保留所有行的同时连接行,并且每个组有一个结果值

2024-04-19 02:11:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图为每个观察值生成一个唯一的组值,该值由连接在一起的列的内容组成,同时保持所有行的完整性

我的观察结果可以分组到一个特定的列(下面的A列)。我想为每个组创建一个唯一的值,该值由该组中每一行的内容组成,但保持这些行不变

我尝试过提供herehere的解决方案,但这些解决方案会折叠结果,每个组只留下一行,而我希望保留所有行

import pandas as pd

d = {'A': [1, 2, 3, 3, 4, 5, 5, 6],
     'B': [345, 366, 299, 455, 879, 321, 957, 543]}

df = pd.DataFrame(d)

print(df)

   A    B
0  1  345
1  2  366
2  3  299
3  3  455
4  4  879
5  5  321
6  5  957
7  5  689
8  6  543

df['B'] = df['B'].astype(str)
df['B_concat'] = df.groupby(['A'])['B'].apply('/'.join)

print(df)

   A    B     B_concat
0  1  345          NaN
1  2  366          345
2  3  299          366
3  3  455      299/455
4  4  879          879
5  5  321  321/957/689
6  5  957          543
7  5  689          NaN
8  6  543          NaN

同一组中的单元应具有相同的B_concat

   A    B     B_concat
0  1  345          345
1  2  366          366
2  3  299      299/455
3  3  455      299/455
4  4  879          879
5  5  321  321/957/689
6  5  957  321/957/689
7  5  689  321/957/689
8  6  543          543

Tags: import内容dataframepandasdfhereasnan
1条回答
网友
1楼 · 发布于 2024-04-19 02:11:43

使用^{}返回与原始DataFrame大小相同的Series,以便可能分配给新列:

df['B'] = df['B'].astype(str)
df['B_concat'] = df.groupby(['A'])['B'].transform('/'.join)

单线解决方案应为:

df['B_concat'] = df['B'].astype(str).groupby(df['A']).transform('/'.join)
print (df)
   A    B B_concat
0  1  345      345
1  2  366      366
2  3  299  299/455
3  3  455  299/455
4  4  879      879
5  5  321  321/957
6  5  957  321/957
7  6  543      543

或:

df['B_concat'] = df.groupby(['A'])['B'].transform(lambda x: '/'.join(x.astype(str)))

相关问题 更多 >