Эффективный метод добавления значений в pandas df

#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