#python #pandas #add
#python #pandas #Добавить
Вопрос:
Я пытаюсь определить более эффективный способ добавления определенных значений в pandas df
.
Для df
приведенного ниже я хочу добавить integers
in Value
для каждого X Y
in Area
. Итак, для каждого X
я хочу добавить это к следующему Y
.
import pandas as pd
d = ({
'Area' : ['X','Y','Z','X','Y','Z'],
'Value' : [10,11,20,21,30,31],
})
df = pd.DataFrame(data=d)
Если значений не так много, я могу просмотреть вручную, согласно следующему:
x = df.iloc[0] df.iloc[1]
Но если df
значение довольно велико, это становится неэффективным.
Предполагаемый результат:
21
51
Ответ №1:
Отфильтруйте по boolean indexing
to Series
, создайте индекс по умолчанию и Series.add
:
s1 = df.loc[df['Area'].eq('X'), 'Value'].reset_index(drop=True)
s2 = df.loc[df['Area'].eq('Y'), 'Value'].reset_index(drop=True)
s = s1.add(s2)
print (s)
0 21
1 51
dtype: int64
Преимущество решения не в том, что важен порядок X
и Y
значений.
Ответ №2:
создайте маску с помощью X
и Y
и groupby для каждых 2 индексов и sum()
, используйте:
m=df[df.Area.isin(['X','Y'])].reset_index(drop=True)
print(m.groupby(m.index//2)['Value'].sum())
Вывод
0 21
1 51