Pandas Aggregated df, показывающий различное количество столбцов между head () и .info () из-за MultiIndexing - PullRequest
1 голос
/ 17 мая 2019

Я агрегирую свою DF:

dfAvg_Volume_RFQ = dfSpecific_Client_Avg_Volume_RFQ.groupby(['Client', 'currency', 'sales_person_name2']).agg({'state': 'size', 'Quantity': 'mean', 'Quantity_CAD': 'mean'})

print(dfAvg_Volume_RFQ.info())

MultiIndex: 1127 entries, (A......) to (Z.....)
    Data columns (total 3 columns):
    state           1127 non-null int64
    Quantity        1127 non-null float64
    Quantity_CAD    1127 non-null float64

Когда я смотрю на голову df, она показывает все шесть столбцов. Когда я запускаю другие агрегаты на dfSpecific_Client_Avg_Volume_RFQ, это только использование трех столбцов в информации, что является проблемой.

print(dfAvg_Volume_RFQ.head(5))

                                       state      Quantity  \
Client  currency sales_person_name2                           
A       USD      OSCAR                  2         2050000.0000   
AA      USD      NAZ                    10        11500000.0000   
AAR     USD      JOSHUA                 1         15000.0000   
ABC     USD      ANGELA                 1         5000000.0000   
                 HANS                   1         10000000.0000   

                                                  Quantity_CAD  
Client  currency sales_person_name2                           
A       USD      OSCAR                  2         2050000.0000   
AA      USD      NAZ                    10        11500000.0000   
AAR     USD      JOSHUA                 1         15000.0000   
ABC     USD      ANGELA                 1         5000000.0000   
                 HANS                   1         10000000.0000   

print(dfAvg_Volume_RFQ.columns)

   state       Quantity   Quantity_CAD
0      1  50000000.0000  47523999.6198
1      4 300000000.0000 399625821.9816
2     18 274241666.6667 365848851.3870
3      1 300000000.0000 409165302.7823
4     32 138905156.2500 138905156.2500

print (dfAvg_Volume_RFQ.index.names)

Index(['state', 'Quantity', 'Quantity_CAD'], dtype='object')
['Client', 'currency', 'sales_person_name2']

При группировании и суммировании по многочисленным столбцам невозможно ли создать df без мультииндекса?

Ответы [ 2 ]

2 голосов
/ 17 мая 2019

Я думаю, что это ожидаемо, потому что есть не 6 столбцов, а 3 уровня MultiIndex и 3 столбца.

Проверьте это:

print (dfAvg_Volume_RFQ.columns)

print (dfAvg_Volume_RFQ.index.names)

Если необходимо преобразовать MultiIndex встолбцы используют DataFrame.reset_index или параметр as_index=False in groupby:

dfAvg_Volume_RFQ = dfAvg_Volume_RFQ.reset_index()

Или:

dfAvg_Volume_RFQ = dfSpecific_Client_Avg_Volume_RFQ.groupby(['Client', 'currency', 'sales_person_name2'], as_index=False)
                                                   .agg({'state': 'size', 'Quantity': 'mean', 'Quantity_CAD': 'mean'}
1 голос
/ 17 мая 2019

Когда вы используете агрегацию для группировки, столбцы, используемые в группе, составляют индекс результирующего кадра данных. Таким образом, в вашем примере «Клиент», «валюта», «имя_продажи_имя2» составляют индекс, и у вас есть только 3 true столбцов: state, Quantity и Quantity_CAD.

Если вы хотите избавиться от индексации и иметь 6 столбцов, просто используйте reset_index:

dfAvg_Volume_RFQ = dfSpecific_Client_Avg_Volume_RFQ.groupby(
    ['Client', 'currency', 'sales_person_name2']).agg({'state': 'size',
                                                       'Quantity': 'mean',
                                                       'Quantity_CAD': 'mean'}).reset_index()

Вы получите DataFrame с простым RangeIndex и 6 столбцами данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...