我有一个熊猫系列对象列表。我想将所有这些系列加起来,以便具有相同索引的行将其值加在一起,而具有唯一索引的行将被添加。除了访问第一个Series对象并遍历和使用Series add函数之外,还有没有更整洁的方法了?我知道对于串联数据框,可以传递一个数据框对象列表,但是我还没有找到类似的方法来添加序列。
背景:我有非常大的数据集,其中每个数据集都分为多个数据帧块。对于每个数据框块,我在每一列上进行了一个values_count运算,从而得到了该序列,并从本质上得到了一个列表列表。使用列表推导,我一次可以为所有块获取一列,但是我需要将这些value_counts加在一起。
for vcl in allvc:
#vcl is a list where each element is a list of value counts
lengthvcl = len(vcl)
for x in range(lengthvcl):
lst2 = [item(x) for item in vcl]
#what to do next...
答案 0 :(得分:1)
reduce
+ pd.Series.add
可以通过functools.reduce
和pd.Series.add
使用一个基于Pandas的解决方案:
from functools import reduce, partial
s1 = pd.Series([1, 2, 3])
s2 = pd.Series([4, 5, 6, 7])
s3 = pd.Series([8, 9, 10, 11, 12])
adder = partial(pd.Series.add, fill_value=0)
res = reduce(adder, [s1, s2, s3])
print(res)
0 13.0
1 16.0
2 19.0
3 18.0
4 12.0
dtype: float64
pd.concat
+ pd.DataFrame.sum
reduce
解决方案是通用的,因为adder
可以替换为任意函数。为了求和,您还可以首先通过串联序列来创建数据框:
res = pd.concat([s1, s2, s3], axis=1).sum(1)