【发布时间】:2018-09-17 16:29:08
【问题描述】:
从循环中我有一个变量 A:
aa = pd.Series(np.random.randn(5))
aaaa = []
aaaa.append(aa.loc[[1]])
aaaa.append(aa.loc[[4]])
aaaa
[1 0.07856
dtype: float64, 4 0.94552
dtype: float64]
现在我想总结(或进行任何其他计算)A 中的元素。我尝试了 sum 函数,但不幸的是它不起作用。例如,
B = sum(aaaa)
给我
1 NaN
4 NaN
dtype: float64
我找到了以下问题和解决方案,但是,它不适用于我的问题,因为 TO 只有一个列表,而不是多个相互附加的列表(具有不同的索引)
edit4:因为我必须多次运行,所以我对两个答案都计时了:
%timeit sum([i.values for i in aaaa])
3.78 µs ± 5.1 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%timeit pd.concat(aaaa).sum()
560 µs ± 15.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
令人惊讶的是,sum 中的“循环”比 pd.Series.concat().sum() 函数快得多
edit5:添加以防其他人遇到同样的问题:如果不知道输入是 pd.Series 还是 pd.Series 列表,可以执行以下操作:
res = sum(aa) if isinstance(aa, pd.Series) else sum([i.values for i in aa])
【问题讨论】:
-
嗨 jpp,为此道歉。一定有什么不正确的,否则它会正常工作吗?我删除了“总和”,并包括了它的外观。就期望的结果而言,这可能更清楚。事实上,我很想展示一个示例,说明如何生成“A”,但这是我的部分代码的产物。
-
你能在这个特定的例子中给出建议吗?我说明了我有什么作为输入,我想做什么或我想得到什么结果,以及当前提出的不起作用的方法(参见上面的调整)
-
我乍一看最好的猜测是你有一个混合数据类型的列表,其中只有一些是
sum(arg)支持的。不过,我并不完全清楚您的输入或预期输出是什么。 -
仅供参考,如果您在使用随机代码路径时遇到间歇性问题,则组合 MCVE 的一部分是选择触发问题的特定(固定,即非随机)示例,并且只用它编写一个独立的代码sn-p。然后人们可以帮助您解决手头的实际问题。
-
关于这个问题,我对 Pandas 不熟悉,所以你必须等待有人看到这个。看起来您的问题与 Pandas
Series使用的数据类型与内置的sum不兼容有关。
标签: python list pandas indexing calculation