【发布时间】:2020-05-29 10:40:21
【问题描述】:
给定以下数据框:
df = pd.DataFrame({'list_col': [np.random.randint(0,100,size=(1, np.random.randint(0,10)))[0] for i in range(100000)]})
返回每行总和的最佳方法是什么? (空行 = 0)
我读到在 pandas 中通常不鼓励使用 .apply
df.list_col.apply(sum)
但是,在尝试正确使用矢量化计算时,我只能提出以下建议:
np.nansum(pd.DataFrame(df.list_col.values.tolist()).values, axis=1)
那么在不同大小的列表数组上使用 numpy 的矢量化计算的正确方法是什么?
【问题讨论】:
-
df["list_col"].map(sum)对我来说比两者都快。 -
@TobyPetty 很有趣,有什么解释为什么 map 会比 apply 快吗?
-
只是“优化”。你不能“更多”或“更少”优化:)
-
不能“向量化”不同长度的列表或数组。快速的
numpy代码适用于矩形数字数组。您的列表不能组合成一个二维整数数组。 -
您有一系列列表,我不确定您对 NumPy 的期望。请澄清一下。
标签: python arrays pandas list numpy