我确信有一种巧妙的方法可以做到这一点,但还没有找到它。
假设我有一个数据框:
f = pd.DataFrame({'A':[1, 2, 3, 4], 'B': [10, 20, 30, 40], 'C':[100, 200, 300, 400]}).T
即,行索引为 A、B 和 C。
现在假设我想获取 A 行和 B 行,并将它们替换为一行,即它们的总和;而且,此外,我想将给定的索引(例如“总和”)分配给该替换行(请注意索引的顺序并不重要)。
目前我必须做:
f.append(pd.DataFrame(f.ix[['A','B']].sum()).T).drop(['A','B'])
后面跟着同样笨重的东西来设置替换行的索引。但是,我很好奇是否有一种优雅的单行方法来完成这两个步骤?
最佳答案
这样做:
In [79]: f.append(f.loc[['A', 'B']].sum(), ignore_index=True).drop([0, 1]).set_index(Index(['C', 'sumAB'])
)
Out[79]:
0 1 2 3
C 100 200 300 400
sumAB 11 22 33 44
或者,您可以使用 Index.get_indexer
来获得更丑陋的单行代码:
In [96]: f.append(f.loc[['A', 'B']].sum(), ignore_index=True).drop(f.index.get_indexer(['A', 'B'])).set_index(Index(['C', 'sumAB']))
Out[96]:
0 1 2 3
C 100 200 300 400
sumAB 11 22 33 44
关于python - Pandas:用一组行的总和替换它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18645023/