обновить группу групп Pandas значением столбца - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть тест df, как это:

df = pd.DataFrame({'A': ['Apple','Apple', 'Apple','Orange','Orange','Orange','Pears','Pears'],
                    'B': [1,2,9,6,4,3,2,1]
                   })
       A    B
0   Apple   1
1   Apple   2
2   Apple   9
3   Orange  6
4   Orange  4
5   Orange  3
6   Pears   2
7   Pears   1

Теперь мне нужно добавить новый столбец с соответствующей разницей в% в столбце «B». Как это возможно. Я не могу заставить это работать.

Я смотрел на обновить значение столбца pandas groupby (). Last () Не уверен, что это относится к моей проблеме.

И это выглядит многообещающе Pandas Groupby и сумма только в одном столбце

Мне нужно найти и вставить в col maxpercchng (все строки в группе) максимальное изменение col (B) на группу столбцов 'A'. Итак, я пришел с этим кодом:

grouppercchng = ((df.groupby['A'].max() - df.groupby['A'].min())/df.groupby['A'].iloc[0])*100

и попробуйте добавить его в группу col 'maxpercchng', например, так:

group['maxpercchng'] = grouppercchng

или как то так

df_kpi_hot.groupby(['A'], as_index=False)['maxpercchng'] = grouppercchng

Кто-нибудь знает, как добавить ко всем строкам в группе столбец maxpercchng?

1 Ответ

0 голосов
/ 19 ноября 2018

Полагаю, вам нужно transform для серий такого же размера, как у исходного DataFrame, заполненного агрегированными значениями:

g = df.groupby('A')['B']
df['maxpercchng'] = (g.transform('max') - g.transform('min')) /  g.transform('first') * 100

print (df)

        A  B  maxpercchng
0   Apple  1        800.0
1   Apple  2        800.0
2   Apple  9        800.0
3  Orange  6         50.0
4  Orange  4         50.0
5  Orange  3         50.0
6   Pears  2         50.0
7   Pears  1         50.0

Или:

g = df.groupby('A')['B']
df1 = ((g.max() - g.min()) / g.first() * 100).reset_index()
print (df1)

        A      B
0   Apple  800.0
1  Orange   50.0
2   Pears   50.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...