Добавление столбца первого вхождения в групповой фрейм данных - PullRequest
2 голосов
/ 28 мая 2020

У меня есть такой фрейм данных -

df=pd.DataFrame({'DT':[1,1,1,2,2,2,1,1],'city':['A','A','A','A','A','A','B','B'],'O':[22,33,44,55,66,77,88,99]})

Теперь для каждого уникального города я хочу сложить все значения в столбце O, впервые встречающиеся в столбце Dt. Выходные данные -

   city  O
0   A   77
1   B   88

Пояснение - для города «A» первое уникальное встречающееся DT равно 1, поэтому мы добавляем соответствующее значение столбца O, равное 22. Затем для того же города «A» первое встречающееся 2 в столбце DT находится 4-я строка, поэтому мы добавляем соответствующий столбец O == 22 + 55 = 77. Аналогично для города B, поскольку в столбце DT присутствует только 1, O будет 88.

Ответы [ 2 ]

3 голосов
/ 28 мая 2020

Вы также можете извлечь первые строки и суммировать с помощью level:

df.groupby(['DT','city'])['O'].first().sum(level=1)

Вывод:

city
A    77
B    88
Name: O, dtype: int64
3 голосов
/ 28 мая 2020

Вам нужно drop_duplicates, а затем groupby

df1  = (

 df.drop_duplicates(subset=["DT", "city"], keep="first")
    .groupby("city")["O"]
    .sum()
    .reset_index()
)

print(df1)

 city   O
0    A  77
1    B  88

или вы можете использовать двойную группу, сначала используя first, затем sum

df.groupby(["city", "DT"]).first().groupby(level=0).sum().reset_index()

  city   O
0    A  77
1    B  88
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...