Добавление списка серий Панд - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть список объектов Серии панд.Я хочу сложить все эти серии так, чтобы строки, имеющие одинаковый индекс, добавляли свои значения вместе, а строки, имеющие уникальные индексы, просто добавлялись.Помимо доступа к первому объекту Series и итерации и использования функции добавления Series, есть ли более удобный способ сделать это?Я знаю, что для конкатенации фреймов данных можно передать список объектов фреймов, но я не нашел ничего похожего для добавления серий таким способом.

Справочная информация: у меня есть очень большие наборы данных, где каждый набор данных разбит на куски блока данных.для каждого блока данных я делал значения 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...

1 Ответ

0 голосов
/ 19 декабря 2018

reduce + pd.Series.add

Одно решение на основе Pandas возможно через functools.reduce и pd.Series.add:

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)
...