Pandas - среднее значение индекса - PullRequest
2 голосов
/ 13 января 2020

Я довольно новичок в pandas, и я изо всех сил пытаюсь получить подходящее среднее значение в многоиндексной серии. Многоиндексный ряд в настоящее время выглядит следующим образом;

idx = pd.MultiIndex.from_tuples([('foo', 111), ('foo', 222),
                                 ('bar', 111), ('bar', 222), ('bar', 333),
                                 ('baz', 111),
                                 ('qux', 111), ('qux', 222)],
                                names=['ID', 'Account Number'])

df = pd.DataFrame(index=idx, data={'Service 1': 18, 'Service 2': 22, 'Total cost': 40})
df = pd.concat([df], keys=['Cost'], axis=1)

                        Cost                     
                   Service 1 Service 2 Total cost
ID  Account Number                               
foo 111                   18        22         40
    222                   18        22         40
bar 111                   18        22         40
    222                   18        22         40
    333                   18        22         40
baz 111                   18        22         40
qux 111                   18        22         40
    222                   18        22         40

Таблицы, из которых извлекаются все данные, относятся к стоимости услуг 1 и 2 на уровне номера счета, но для этого действительно необходимо применить стоимость на уровне идентификатора и распределить стоимость между номера счетов, так что это должно выглядеть так:

                        Cost                      
                   Service 1  Service 2 Total cost
ID  Account Number                                
foo 111                  9.0  11.000000  20.000000
    222                  9.0  11.000000  20.000000
bar 111                  6.0   7.333333  13.333333
    222                  6.0   7.333333  13.333333
    333                  6.0   7.333333  13.333333
baz 111                 18.0  22.000000  40.000000
qux 111                  9.0  11.000000  20.000000
    222                  9.0  11.000000  20.000000

Я пробовал df.groupby(['ID']).transform('mean'), но это, очевидно, дает мне исходные цифры, и я не уверен, как добраться туда, где мне нужно.

Чувствую, что я с этим справился, поэтому любая помощь будет признательна.

1 Ответ

2 голосов
/ 13 января 2020

Спасибо @ALollz за редактирование. Всегда полезно иметь полный код конструктора Dataframe, если есть мультииндекс :

df.div(df.groupby(level=0).transform('count'))

                        Cost                      
                   Service 1  Service 2 Total cost
ID  Account Number                                
foo 111                  9.0  11.000000  20.000000
    222                  9.0  11.000000  20.000000
bar 111                  6.0   7.333333  13.333333
    222                  6.0   7.333333  13.333333
    333                  6.0   7.333333  13.333333
baz 111                 18.0  22.000000  40.000000
qux 111                  9.0  11.000000  20.000000
    222                  9.0  11.000000  20.000000
...