Невозможно связать новый групповой фрейм данных с оригинальным фреймом данных - PullRequest
1 голос
/ 09 января 2020

У меня есть кадр данных с именем differ_vt, который я хотел применить groupby и суммировать по столбцам 'CO_FIPS' и 'FLD_ZONE':

        FLD_ZONE    AWPOP_1   Area_SQMI_1   AWHU_1  AWPOP_2  Area_SQMI_2    AWHU_2  CO_FIPS
    0   A           18.1      23.1          101.3   3.0      23.1           3.1     50001   
    1   AE          6.7       13.5          58.6    0.03     13.5           4.8     50001   
    2   N           1.3       1.2           23.0    7.1      1.2            8.3     50001
    3   X           0.0       38.5          0.0     0.0      38.5           0.0     50001
    4   X500        4.6       44.5          4.8     4.8      44.5           2.1     50001

Я создаю новый кадр данных для сгруппированных и итоговые данные:

vt_sum = differ_vt_outer.groupby(['CO_FIPS', 'FLD_ZONE']).agg({'AWPOP_1': 'sum', 'Area_SQMI_1': 'sum', 'AWHU_1': 'sum', 'AWPOP_2': 'sum', 'Area_SQMI_2': 'sum', 'AWHU_2': 'sum'})

Новый фрейм данных выглядит примерно так:

vt_sum.head()
>
                  AWPOP_1   Area_SQMI_1 AWHU_1  AWPOP_2 Area_SQMI_2 AWHU_2 
CO_FIPS FLD_ZONE                        
50001   A         2335.8    79.7        1095.1  2334.0  79.7        1094.1
        AE        2134.5    74.1        1179.5  2134.5  74.1        1179.5
        N         96.8      0.2         13.1    94.0    0.2         11.7
        X         68119.7   1333.2      30623.9 68115.5 1333.2      30621.9
        X500      339.2     4.4         149.8   339.2   4.4         149.8
50003   A         1006.9    4.8         542.7   1006.9  4.8         542.7
        AE        2441.6    2.3         1265.0  2441.6  2.3         1265.0
        AO        3.1       0.0         3.5     3.1     0.0         3.5
        X         34896.6   700.4       20075.2 34896.6 700.4       20075.2

Теперь я хочу связать итоговый фрейм данных с исходным diff_vt фреймом данных и создать новые столбцы. на основе суммированных значений. Например, для CO_FIPS = 50001 и FLD_ZONE = A я хочу добавить столбец с именем Tot_AWPOP_1, который имеет значение 2335,8.

differ_vt_outer['Tot_AWPOP_1'] = vt_sum['AWPOP_1'].values

Однако, когда я запускаю это, я получаю ошибку:

ValueError: длина значений не соответствует длине индекса

Как я могу решить эту проблему?

1 Ответ

1 голос
/ 09 января 2020

Вы можете использовать transform вместо agg после groupby и join результата в оригинальном кадре данных после add_prefix для имен столбцов, попробуйте:

list_col_sum = ['AWPOP_1', 'Area_SQMI_1', 'AWHU_1', 'AWPOP_2', 'Area_SQMI_2', 'AWHU_2']
differ_vt_outer = differ_vt_outer.join(differ_vt_outer.groupby(['CO_FIPS', 'FLD_ZONE'])[list_col_sum ]\
                                                      .transform(sum).add_prefix('Tot_'))
...