Добавление значений двух серий Pandas с разными именами столбцов - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть две серии панд одинаковой длины, но с разными именами столбцов.Как можно добавить значения в них?

series.add(other, fill_value=0, axis=0) избегает значений NaN, но значения не добавляются.Вместо этого результатом является объединение двух рядов.

Есть ли способ получить новый ряд, состоящий из суммы значений в двух рядах?

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Несоответствующие показатели

Эта проблема состоит в том, что ваши 2 серии имеют разные индексы.Вот пример:

s1 = pd.Series([1, np.nan, 3, np.nan, 5], index=np.arange(5))
s2 = pd.Series([np.nan, 7, 8, np.nan, np.nan], index=np.arange(5)+10)

print(s1.add(s2, fill_value=0, axis=0))

0     1.0
1     NaN
2     3.0
3     NaN
4     5.0
10    NaN
11    7.0
12    8.0
13    NaN
14    NaN
dtype: float64

У вас есть 2 варианта: переиндексировать с помощью, например, словаря или игнорировать индексы и добавлять свою серию позиционно.

Картографический индекс одной серии для выравнивания сдругое

Вы можете использовать словарь для выравнивания.Отображение ниже является произвольным.NaN значения появляются тогда, когда после переиндексации значения в обеих сериях равны NaN:

index_map = dict(zip(np.arange(5) + 10, [3, 2, 4, 0, 1]))
s2.index = s2.index.map(index_map)

print(s1.add(s2, fill_value=0, axis=0))

0     1.0
1     NaN
2    10.0
3     NaN
4    13.0
dtype: float64

Пропуск индексов;использовать только позиционное местоположение

В этом случае вы можете либо создать новую серию с регулярным pd.RangeIndex в качестве индекса (то есть 0, 1, 2, ...), либо использовать индекс из одного изсерия ввода:

# normalized index
res = pd.Series(s1.values + s2.values)

# take index from s1
res = pd.Series(s1.values + s2.values, index=s1.index)
0 голосов
/ 23 ноября 2018

Атрибут values позволяет получить доступ к базовым необработанным массивам.Вы можете добавить их.

raw_sum = series.values + other.values
series2 = Series(raw_sum, index=series.index)

Это также работает:

series2 = series + other.values
...