首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >组合DataFrame中的多列

组合DataFrame中的多列
EN

Stack Overflow用户
提问于 2015-09-22 17:00:22
回答 4查看 271关注 0票数 1

我有一个包含40列(从0到39列)的DataFrame,我想一次将它们分组四列:

代码语言:javascript
复制
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.binomial(1, 0.2, (100, 40)))
代码语言:javascript
复制
new_df["0-3"] = df[0] + df[1] + df[2] + df[3]
new_df["4-7"] = df[4] + df[5] + df[6] + df[7]
...
new_df["36-39"] = df[36] + df[37] + df[38] + df[39]

我能用一条语句(或者比单独总结它们更好的方式)来做这件事吗?新DataFrame中的列名并不重要。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-09-22 20:21:22

我不知道这是否是最好的方法,但我最终使用了MultiIndex:

代码语言:javascript
复制
df.columns = pd.MultiIndex.from_product((range(10), range(4)))
new_df = df.groupby(level=0, axis=1).sum()

更新:可能是因为索引的缘故,这比其他方法更快。如果考虑到构建索引的时间,df.groupby(df.columns//4, axis=1).sum()也可以更快地完成。但是,索引更改是一次操作,我更新df并接受数千次求和,所以使用MultiIndex对我来说更快。

票数 1
EN

Stack Overflow用户

发布于 2015-09-22 17:21:09

您可以选择列并在行轴上求和,如下所示。

代码语言:javascript
复制
df['0-3'] = df.loc[:, 0:3].sum(axis=1)

有几件事要注意:

  1. df[0] + df[1] ...传播数据时,这样的求和将忽略丢失的数据。如果您想要这样的行为,请通过skipna=False
  2. 不一定有任何性能上的好处,实际上可能会慢一点。
票数 2
EN

Stack Overflow用户

发布于 2015-09-22 21:09:51

另一种方法是:

代码语言:javascript
复制
new_df = df.transpose()  
new_df['Group'] = new_df.index / 4  
new_df = new_df.groupby('Group').sum().transpose()

注意,这里的除法操作是整数除法,而不是浮点除法.

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32722671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档