【问题标题】:How can I add the values of pandas columns with the same name?如何添加具有相同名称的 pandas 列的值?
【发布时间】:2019-11-11 23:10:20
【问题描述】:

我有一个如下所示的 pandas 数据框:

我有几个具有相同名称的列。我想将这些列合并为一个并将其中的值相加。例如,在第一行中,foot 作为列名出现了 5 次。我想将这 5 个与值 (1) 的总和组合成一英尺的列。

对于上面的数据框,我希望将其组合成:

finger foot forearm glute groin
  0     1    0       0      0
  0     0    0       0      0
  0     0    0       0      0
  0     0    0       0      0
  0     0    0       0      0

本质上,有finger的5列组合成一列,带有header的finger,该行中所有项目的总和为0。同样,有foot的6列组合成一列,称为foot,并取总和在该特定行中的所有 6 列中,即 1。我想对所有列执行此操作,并获得具有相同列名的每个项目的总和。 我怎么能这样做?

【问题讨论】:

  • 尝试以文本的形式添加一个示例数据集,这样我们就可以复制并使用它来创建答案。我们不能复制图片。

标签: python pandas


【解决方案1】:

使用DataFrame.groupby

这是一个例子

df=pd.DataFrame({'col1':[1,2],'col2':[2,3]})
df=pd.concat([df,df],axis=1)
print(df)

   col1  col2  col1  col2
0     1     2     1     2
1     2     3     2     3

new_df=df.groupby(level=0,axis=1).sum()
print(new_df)

   col1  col2
0     2     4
1     4     6

axis = 1 告诉 pandas 我们要按列分组,level = 0 告诉它我们要根据列的级别 0 来划分组(因为 axis=1),在这种情况下只有列中的一个级别,因为列中没有MultiIndex,另一种方法是:

new_df = df.groupby(df.columns, axis=1).sum()

   col1  col2
0     2     4
1     4     6

【讨论】:

  • 如果其中一列有 1,这实际上只是输出所有列的总和。所以对于第一行,它输出 6 为脚,因为有 6 列名为 foot。
  • 我已经编辑了我的帖子以提供带有描述的预期输出。
  • 我认为代码应该可以完美运行,请检查一下,如果没有,请包含一个更具代表性的数据框(在不同的位置有更多的数据框)
  • 谁能解释一下“level = 0”到底在做什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 2019-04-26
  • 2021-02-24
  • 2020-01-02
  • 2021-02-05
相关资源
最近更新 更多