KeyError в dataframe вызвал неправильное групповое приложение? - PullRequest
0 голосов
/ 23 октября 2019

Я создал итоговый кадр данных из другого кадра данных, используя .groupby и .agg.

sum_df = cnms_df.groupby(['Tiermetric', 'Mod_unMod', 'Val_Combined', 'Det_Approx', 'State', 'Region', 'CO_FIPS']).agg({'MILES': 'sum'})

Однако что-то выглядит не совсем правильно;кажется, что отсутствуют значения.

Tiermetric Mod_unMod Val_Combined Det_Approx State Region CO_FIPS MILES 
Other 1    UnMapped  ASSESSED     Approx     IN    5      18001   8.397255
                                                          18003   3.284817
                                                          18011   64.019156
                                                          18017   9.068318
TIER 4     Modernized VALID       Detailed   NC    4      37119   2.046716
                                             NC    4      37120   59.890107
                                             NC    4      37025   3.773599

Когда я пытаюсь сделать что-то вроде этого:

sum_df['CO_FIPS'][0]

Я получаю сообщение об ошибке, связанное с индексацией:

KeyError: 'CO_FIPS'

Я хочу, чтобы мой окончательный кадр данных выглядел так:

Tiermetric Mod_unMod Val_Combined Det_Approx State Region CO_FIPS MILES 
Other 1    UnMapped  ASSESSED     Approx     IN    5      18001   8.397255
Other 1    UnMapped  ASSESSED     Approx     IN    5      18003   3.284817                    
Other 1    UnMapped  ASSESSED     Approx     IN    5      18011   64.019156
Other 1    UnMapped  ASSESSED     Approx     IN    5      18017   9.068318
TIER 4     Modernized VALID       Detailed   NC    4      37119   2.046716
TIER 4     Modernized VALID       Detailed   NC    4      37120   59.890107
TIER 4     Modernized VALID       Detailed   NC    4      37025   3.773599

Как я могу это исправить?

1 Ответ

1 голос
/ 23 октября 2019

В результате группировки и суммирования все эти столбцы становятся многоиндексными. Вы можете использовать reset_index, чтобы превратить индекс в столбцы.

In [1]: import pandas as pd

In [2]: df = pd.DataFrame({'a':[1, 1, 2], 'b':[10, 20, 30]})

In [3]: df
Out[3]:
   a   b
0  1  10
1  1  20
2  2  30

In [4]: grouped = df.groupby('a').agg({'b': 'sum'})

In [5]: grouped  # a is an index now
Out[5]:
    b
a
1  30
2  30

In [6]: grouped = df.groupby('a', as_index=False).agg({'b': 'sum'})

In [7]: grouped  # now a is a column
Out[7]:
   a   b
0  1  30
1  2  30

Это также будет работать с мультииндексами.

...