Как умножить столбец панд на часть мультииндексного фрейма данных

1

У меня есть кадр данных с несколькими индексами и одним столбцом.

Поля индекса - это type и amount, столбец называется count

Я хотел бы добавить столбец, который умножает amount и count

df2 = df.groupby(['type','amount']).count().copy()
# I then dropped all columns but one and renamed it to "count"

df2['total_amount'] = df2['count'].multiply(df2['amount'], axis='index')

не работает. Я получаю ключевую ошибку при amount.

Как получить доступ к части мультииндекса, чтобы использовать ее в вычислениях?

Теги:
pandas
python-3.x
multiplication

1 ответ

1
Лучший ответ

Используйте GroupBy.transform для Series с тем же размером, что и исходный df с агрегированными значениями, поэтому можно multiple:

count = df.groupby(['type','amount'])['type'].transform('count')
df['total_amount'] = df['amount'].multiply(count, axis='index')
print (df)
   A  amount  C  D  E type  total_amount
0  a       4  7  1  5    a             8
1  b       5  8  3  3    a             5
2  c       4  9  5  6    a             8
3  d       5  4  7  9    b            10
4  e       5  2  1  2    b            10
5  f       4  3  0  4    b             4

Или же:

df = pd.DataFrame({'A':list('abcdef'),
                   'amount':[4,5,4,5,5,4],
                   'C':[7,8,9,4,2,3],
                   'D':[1,3,5,7,1,0],
                   'E':[5,3,6,9,2,4],
                   'type':list('aaabbb')})

print (df)
   A  amount  C  D  E type
0  a       4  7  1  5    a
1  b       5  8  3  3    a
2  c       4  9  5  6    a
3  d       5  4  7  9    b
4  e       5  2  1  2    b
5  f       4  3  0  4    b

df2 = df.groupby(['type','amount'])['type'].count().to_frame('count')
df2['total_amount'] = df2['count'].mul(df2.index.get_level_values('amount'))
print (df2)
             count  total_amount
type amount                     
a    4           2             8
     5           1             5
b    4           1             4
     5           2            10
  • 0
    Спасибо, похоже, это работает, но мне нужно использовать df2['amount'] ...
  • 1
    Хорошо, вы редактировали это, теперь это работает. Благодарю.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню