Pandas DataFrame,将重复的列添加到一起

时间:2015-01-30 22:57:47

标签: python sum duplicates

我有这个非常大的DataFrame,它有重复的列,但它下面的值不是。我想将重复列合并在一起并添加值。

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

       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列一起添加以获得此结果:

       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

2 个答案:

答案 0 :(得分:3)

我建议使用groupby:

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

为了使其适用于MultiIndex,可以这样做:

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()

答案 1 :(得分:2)

我不确定为什么你要保存旧的值列,如果你要总结它们,所以这是一种方法:

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

使用如下所示的起始数据框:

        Ruby  Python  Ruby
2010     1       2     1
2011     2       4     3
2012     3       6     5
2013     4       8     7
2014     5      10     9

然后成为:

        Ruby  Python
2010     2       2
2011     5       4
2012     8       6
2013    11       8
2014    14      10