如何将不同的值行合并到一个新列的单行中?

2024-10-03 17:17:15 发布

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

我有一张如下所示的表格:

Id    Family    Modal
a1     Jack      A381
a2     Jack      B674
a4    Sutyama    789b
a5    Sutyama    987y

我希望得到以下输出

Id    Family    Modal   Overall
a1     Jack      A381   A381,B674
a2     Jack      B674   A381,B674
a4    Sutyama    789b   789b,987y
a5    Sutyama    987y   789b,987y

我尝试了下面的代码,但它返回我的整体空列

df["Overall"]=df.groupby("Family")["Modal"].apply(' '.join)

有人有主意吗


Tags: 代码ida2dfa1family表格a4
2条回答

也可以通过map修复代码

df["Overall"]=df.Family.map(df.drop_duplicates(['Family','Modal']).groupby("Family")["Modal"].apply(' '.join))
df
Out[45]: 
   Id   Family Modal    Overall
0  a1     Jack  A381  A381 B674
1  a2     Jack  B674  A381 B674
2  a4  Sutyama  789b  789b 987y
3  a5  Sutyama  987y  789b 987y

以下是我使用groupby应用函数时的经验法则:

  • 要计算并返回聚合输出,请使用GroupBy.aggGroupBy.apply,或
  • 要将聚合结果广播回原始行,请使用GroupBy.transform

这是第二条规则的用例:

df['Overall'] = df.groupby("Family")["Modal"].transform(','.join)
df

   Id   Family Modal    Overall
0  a1  Jack     A381  A381,B674
1  a2  Jack     B674  A381,B674
2  a4  Sutyama  789b  789b,987y
3  a5  Sutyama  987y  789b,987y

相关问题 更多 >