Как применить несколько групповых условий для выполнения операции над столбцом во фрейме данных Pandas? - PullRequest
0 голосов
/ 01 октября 2018

Я новичок в питоне.У меня есть фрейм данных в этой форме:

  A B C
0 1 2 0.65
1 2 3 0.01
2 3 1 0.34
3 3 1 0.11
4 2 3 0.02
5 2 3 0.12

Я хочу, чтобы значения в столбце C добавлялись всякий раз, когда я получаю одинаковые значения в столбцах A и B в 2 или более последовательных строк.У меня есть несколько значений, которым я хочу соответствовать.Вывод должен выглядеть примерно так:

  A B C
0 1 2 0.65
1 2 3 0.01
2 3 1 0.45
3 2 3 0.14

Я выполнил поиск решения и получил следующий код:

res = df.groupby(by=[df.A.ne(2).cumsum(), 'A', df.B.ne(3).cumsum(), 'B'], as_index=False).agg({'C': 'sum'})

этот код дает мне сумму только двух последних строк.Я хочу быть в состоянии сделать это сразу.

Спасибо, Сара

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

IIUC, вы действительно близки, просто добавив diff

s1,s2 = df.A.diff().ne(0).cumsum(),df.B.diff().ne(0).cumsum()
df.groupby([s1,s2]).agg({'A':'first','B':'first','C':'sum'})
Out[95]: 
     A  B     C
A B            
1 1  1  2  0.65
2 2  2  3  0.01
3 3  3  1  0.45
4 4  2  3  0.14
0 голосов
/ 01 октября 2018

Вот способ достичь желаемого с помощью логического маскирования

   indices = []
   for index, row in df.iterrows():
       if row.A == row.B:
           if df.loc[index-1, 'A'] == df.loc[index-1, 'B']:
               indices.append(index)

   df[df.index.isin(indices)].C.sum()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...