gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 08:25:55 24 4
gpt4 key购买 nike

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

我的观察结果可以分组到特定列(下面的 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

最佳答案

使用GroupBy.transform返回的 Series 与原始 DataFrame 大小相同,因此可以分配给新列:

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)))

关于python - 如何在保留所有行的同时连接行并使每组有一个结果值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54255757/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com