首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pandas DataFrame,一起添加重复的列

Pandas DataFrame,一起添加重复的列
EN

Stack Overflow用户
提问于 2015-01-31 06:57:47
回答 2查看 7.2K关注 0票数 5

我有一个非常大的DataFrame,它有重复的列,但它下面的值没有。我希望将重复的列合并在一起并添加值。

这个非常大的DataFrame是通过将序列附加在一起而生成的,这就是复制发生的地方。

代码语言:javascript
复制
       Py Java Ruby C  Ruby
2010    1   5   8   1   5
2011    5   5   1   9   8
2012    1   5   8   2   8
2013    6   3   8   1   9
2014    4   8   9   9   9

所以我想把两个Ruby列加在一起得到这个结果:

代码语言:javascript
复制
       Py Java Ruby C  Ruby
2010    1   5   13  1   5
2011    5   5   9   9   8
2012    1   5   16  2   8
2013    6   3   17  1   9
2014    4   8   18  9   9

我运行的是python 2.7

EN

回答 2

Stack Overflow用户

发布于 2016-06-27 23:21:02

我建议使用groupby:

代码语言:javascript
复制
df = df.groupby(axis=1, level=0).sum()

为了让它也适用于MultiIndex,可以这样做:

代码语言:javascript
复制
if df.columns.duplicated().any():
    all_levels = df.columns.nlevels
    if all_levels > 1:
        all_levels = range(all_levels)
    df = df.groupby(axis=1, level=all_levels).sum()

编辑

不使用groupby,现在可以简单地这样做:

代码语言:javascript
复制
df = df.sum(axis=1, level=0)

注意nans,上面的过程会将nans转换为0。为了避免这种情况,可以使用skipna=Falsemin_count=1 (取决于用例):

代码语言:javascript
复制
df = df.sum(axis=1, level=0, skipna=False)
票数 9
EN

Stack Overflow用户

发布于 2015-01-31 22:51:13

我不知道为什么要保存旧的值列,如果要对它们求和,下面是一种方法:

代码语言:javascript
复制
df = pd.DataFrame({'col1':x, 'col2':y, 'col3':z}, index=a)
df.columns = ['Ruby', 'Python', 'Ruby']
df['Ruby'] = df['Ruby'].sum(axis=1)
df = df.T.drop_duplicates()
df = df.T

起始数据帧如下所示:

代码语言:javascript
复制
        Ruby  Python  Ruby
2010     1       2     1
2011     2       4     3
2012     3       6     5
2013     4       8     7
2014     5      10     9

然后变成:

代码语言:javascript
复制
        Ruby  Python
2010     2       2
2011     5       4
2012     8       6
2013    11       8
2014    14      10
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28246014

复制
相关文章

相似问题

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