有没有办法根据索引折叠几列,同时保留其他列?

Posted

技术标签:

【中文标题】有没有办法根据索引折叠几列,同时保留其他列?【英文标题】: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 一样加入它们的行,有没有办法做到这一点?

感谢您的帮助!

【问题讨论】:

您的问题解决了吗? 【参考方案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 更新了答案...请看一下 :)

以上是关于有没有办法根据索引折叠几列,同时保留其他列?的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA - 保留指定列并删除所有其他列

如何在表格上创建圆角并为整个表格和列保留表格边框? [复制]

隐藏列时如何保留表格列的宽度?

折叠 Python 列表,保留唯一列和最高值

WPF 可见性折叠保留空间

在一列上汇总数据框,同时保留其他列