首页 > 解决方案 > 在 pandas 中对相同的列名进行分组会在列中添加“.1”

问题描述

我正在尝试在单个数据框中对相同的列进行分组,类似于这个问题:Grouping on same column names in pandas

然而,这个答案对我不起作用。当我对该问题应用已接受的答案时,我的数据框已将“.1”添加到重复列的第二次迭代中。我的重复列没有重复数据,这可能是问题所在?

这是我的桌子:

Timepoint Col1 Col2 Col3 Col1 Col2 Col3

   1       1    2   3
   2       4    5   6
   3                      7    8    9
   4                      10   11   12

我希望表格看起来像这样:

Timepoint Col1 Col2 Col3 
     1     1    2   3
     2     4    5   6
     3     7    8   9
     4     10   11  12

但是当我应用链接代码时,表格看起来像这样:

Timepoint Col1 Col2 Col3 Col1.1 Col2.1 Col3.1

   1       1    2   3
   2       4    5   6
   3                      7      8     9
   4                      10     11    12

我的数据框有数百列,所以我需要一个不指定需要分组的列的解决方案。

请注意,这不是此问题的重复:将 NaN 移到其各自行的末尾,因为该问题没有重复的列名,并且它将数据转移到不同标记的列。

标签: pythonpandaspandas-groupby

解决方案


Timepoint通过by创建索引DataFrame.set_index,然后使用groupbylambda 函数与split和聚合sum,或max,或meanfirst。聚合方法取决于数据,但如果总是像样本数据输出中的缺失值总是相同的:

df = (df.set_index('Timepoint')
       .groupby(lambda x: x.split('.')[0], axis=1).sum()
       .reset_index())
print (df)
   Timepoint  Col1  Col2  Col3
0          1   1.0   2.0   3.0
1          2   4.0   5.0   6.0
2          3   7.0   8.0   9.0
3          4  10.0  11.0  12.0

推荐阅读