当我对一个DataFrame
求和时,它返回一个Series
:
In [1]: import pandas as pd
In [2]: df = pd.DataFrame([[1, 2, 3], [2, 3, 3]], columns=['a', 'b', 'c'])
In [3]: df
Out[3]:
a b c
0 1 2 3
1 2 3 3
In [4]: s = df.sum()
In [5]: type(s)
Out[5]: pandas.core.series.Series
我知道我可以用这个Series
构造一个新的DataFrame
。但是,还有什么更“pandasic”的方法吗?
6条答案
按热度按时间bgtovc5b1#
我会继续说......“不”,我不认为有一个直接的方法来做到这一点,pandastic的方法(也是pythonic的)是明确的:
或者,更优雅地说,使用字典(注意,这会复制求和数组):
(As Python中的Zen说:“实用胜过纯洁”,所以如果你关心这个时间,就用这个)。
。
一些
%timeit
的小例子:对于一个稍微大一点的:
vawmfj5a2#
通常,不仅需要将列的总和转换为 Dataframe ,而且还需要将结果 Dataframe 转置。还有一种方法:
wvmv3b1j3#
您可以使用
agg
进行简单的操作,如sum
,看看它有多紧凑:但是,这可能会带来很大的性能损失。当更短的执行时间比更短的代码行更重要时,请考虑其他解决方案。
ih99xse14#
我不确定早期版本,但从pandas 0.18.1开始,可以使用pandas.Series.to_frame方法。
name
参数是可选的,用于定义列名。ajsxfq5m5#
df.sum().to_frame()
应该做你想做的。参见https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.to_frame.html。
ktecyv1j6#
通过
DF.sum().to_frame()
或将聚合结果直接存储到Dataframe,不是一个健康的选择。更重要的是,当你想单独存储聚合值和聚合总和时。使用DF.sum().to_frame将一起存储值和总和。尝试下面的更干净的版本。