我想说的是……"不",我认为没有直接的方法可以做到,pandas风格的方式(同时也是Pythonic的方式)是要明确表达:
pd.DataFrame(df.sum(), columns=['sum'])
或者更优美地,使用字典(请注意,这会复制总和数组):
pd.DataFrame({'sum': df.sum()})
正如 @root 所指出的那样,使用以下方式更快:
pd.DataFrame(np.sum(df.values, axis=0), columns=['sum'])
正如Python之禅所述:“实用性胜过纯粹性”,所以如果你在意时间的话,就使用它吧。
然而,或许最Pandastic(指使用Pandas库时最优雅的方式)的方法是直接使用Series! :)
.
以下是一些关于你的小例子的%timeit
:
In [11]: %timeit pd.DataFrame(df.sum(), columns=['sum'])
1000 loops, best of 3: 356 us per loop
In [12]: %timeit pd.DataFrame({'sum': df.sum()})
1000 loops, best of 3: 462 us per loop
In [13]: %timeit pd.DataFrame(np.sum(df.values, axis=0), columns=['sum'])
1000 loops, best of 3: 205 us per loop
还有一个稍微大一点的:
In [21]: df = pd.DataFrame(np.random.randn(100000, 3), columns=list('abc'))
In [22]: %timeit pd.DataFrame(df.sum(), columns=['sum'])
100 loops, best of 3: 7.99 ms per loop
In [23]: %timeit pd.DataFrame({'sum': df.sum()})
100 loops, best of 3: 8.3 ms per loop
In [24]: %timeit pd.DataFrame(np.sum(df.values, axis=0), columns=['sum'])
100 loops, best of 3: 2.47 ms per loop
pd.DataFrame({'my_sum': df.sum()})
已经足够 Pandas 化了。这使您有可能给您的总和“命名”。 - eumiropd.DataFrame(np.sum(df.values, axis=1), columns=['my_sum'])
的速度明显更快... - root