我有一个非常大的DataFrame,它有重复的列,但它下面的值没有。我希望将重复的列合并在一起并添加值。
这个非常大的DataFrame是通过将序列附加在一起而生成的,这就是复制发生的地方。
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
发布于 2016-06-27 23:21:02
我建议使用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()编辑
不使用groupby,现在可以简单地这样做:
df = df.sum(axis=1, level=0)注意nans,上面的过程会将nans转换为0。为了避免这种情况,可以使用skipna=False或min_count=1 (取决于用例):
df = df.sum(axis=1, level=0, skipna=False)发布于 2015-01-31 22:51:13
我不知道为什么要保存旧的值列,如果要对它们求和,下面是一种方法:
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 10https://stackoverflow.com/questions/28246014
复制相似问题