如何将不同的值行合并为新列的单行?

时间:2019-06-03 01:49:28

标签: python pandas group-by pandas-groupby

我有一张桌子,如下所示:

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)

有人有想法吗?

2 个答案:

答案 0 :(得分:3)

在使用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

答案 1 :(得分: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