Я пытаюсь вернуть серию, содержащую некоторые дополнения из определенных значений в пандах df
. В частности, для df
ниже. Я хочу добавить все X's
со всеми Y's
. Однако они не в каком-то определенном порядке.
import pandas as pd
d = ({
'Item' : ['X','Y','Z','X','Z','Y','Z'],
'Value' : [10,11,20,21,10,30,31],
})
df = pd.DataFrame(data=d)
Xs = df.loc[df['Item'] == 'X', 'Value']
Ys = df.loc[df['Item'] == 'Y', 'Value']
Out = Xs + Ys
Предполагаемый результат:
21
51
Вот проблема с разными индексами, поэтому нужно то же самое по Series.reset_index
с drop=True
:
Out = Xs.reset_index(drop=True) + Ys.reset_index(drop=True)
print (Out)
0 21
1 51
Name: Value, dtype: int64
Или, если возможно, другую длину Series
, используйте Series.add
:
Out = Xs.reset_index(drop=True).add(Ys.reset_index(drop=True), fill_value=0)
Или, если всегда одинаковая длина Series
возможна сумма массивов 1d numpy:
Out = pd.Series(Xs.values + Ys.values)
print (Out)
0 21
1 51
dtype: int64
Я предпочел ответ @jezrael, но хочу поделиться своей мыслью.
Xs = df.loc[df['Item'] == 'X', 'Value'].tolist()
Ys = df.loc[df['Item'] == 'Y', 'Value'].tolist()
Out = pd.Series(list(map(sum, zip(Xs, Ys))))
print(Out)