【问题标题】:Is there a way to collapse a few columns based on an index, while retaining the other columns?有没有办法根据索引折叠几列,同时保留其他列?
【发布时间】:2021-10-11 19:07:11
【问题描述】:

我有一个看起来像这样的数据框:

ID Var1 Var2 Var3
1 row1 abc 321
1 row2 bcd 456
2 row4 def 555
2 row5 tss 889

我想要做的是根据 ID 在 Var1 中用逗号连接所有字符串,但保留所有其他列。所以最后一个应该是这样的:

ID Var1 Var2 Var3
1 row1, row2 abc 321
1 row1, row2 bcd 456
2 row4, row5 def 555
2 row4, row5 tss 889

我尝试过聚合,但如果我这样做,Var2 和 Var3 会被丢弃。我有几列我想像使用 Var 1 一样加入它们的行,有没有办法做到这一点?

感谢您的帮助!

【问题讨论】:

  • 您的问题解决了吗?

标签: python pandas


【解决方案1】:

使用groupby()+transform():

如果顺序很重要:

df['Var1']=df.groupby('ID')['Var1'].transform(lambda x:','.join(pd.unique(x)))

如果顺序无关紧要:

df['Var1']=df.groupby('ID')['Var1'].transform(lambda x:','.join(set(x)))

df的输出:

    ID  Var1        Var2    Var3
0   1   row1,row2   abc     321
1   1   row1,row2   bcd     456
2   2   row4,row5   def     555
3   2   row4,row5   tss     889

【讨论】:

  • 您好,抱歉,您如何确保仅加入唯一值?所以如果 row1 出现不止一次,那么它不会变成 "row1, row2, row1" 而是 "row1, row2"
  • @JayneHow 更新了答案...请看一下 :)
猜你喜欢
  • 1970-01-01
  • 2022-11-23
  • 1970-01-01
  • 1970-01-01
  • 2022-06-23
  • 1970-01-01
  • 1970-01-01
  • 2015-07-17
  • 1970-01-01
相关资源
最近更新 更多