【问题标题】:How do I access a column on the new data frame after I do a groupby on it?对新数据框进行分组后如何访问新数据框上的列?
【发布时间】:2017-12-28 23:44:38
【问题描述】:

假设“X”是数据框 df1 中的一列,给出分类值。

我运行df2=df1.groupby('X').sum()

获取一个新的数据框 df2.当我打印 df2 时,我仍然可以看到“X”作为其中的一列。但不知何故,我无法使用 df2['X'] 访问它。它甚至没有出现在df2.columns 中。

如何使 df2 中的“X”可访问?我想这与数据框的索引列有关,但我确实需要在 df2 中使用“X”。

【问题讨论】:

    标签: python pandas dataframe indexing pandas-groupby


    【解决方案1】:

    需要reset_index,因为第一列称为index

    df2=df1.groupby('X').sum()
    print (df2.index)
    
    df2=df1.groupby('X').sum().reset_index()
    

    或者:

    df2=df1.groupby('X', as_index=False).sum()
    

    如果 groupby by 多列得到MultiIndex:

    df2 = df.groupby(['patient_id', 'date_of_admission']).sum()
    print (df2.index)
    

    并且还帮助as_index=False参数或reset_index()函数。

    示例

    dates = pd.to_datetime(['2017-01-01'] * 3 + ['2017-01-02'] * 2)
    df1 = pd.DataFrame({'X':list('aabba'),
                       'patient_id':[4,5,4,3,3],
                       'A':[7,8,9,1,2,],
                       'date_of_admission':dates})
    
    print (df1)
       A  X date_of_admission  patient_id
    0  7  a        2017-01-01           4
    1  8  a        2017-01-01           5
    2  9  b        2017-01-01           4
    3  1  b        2017-01-02           3
    4  2  a        2017-01-02           3
    
    df2=df1.groupby('X').sum()
    print (df2)
        A  patient_id
    X                
    a  17          12
    b  10           7
    
    print (df2.index)
    Index(['a', 'b'], dtype='object', name='X')
    
    df2=df1.groupby('X').sum().reset_index()
    print (df2)
       X   A  patient_id
    0  a  17          12
    1  b  10           7
    
    df2=df1.groupby('X', as_index=False).sum()
    print (df2)
       X   A  patient_id
    0  a  17          12
    1  b  10           7
    

    df2 = df1.groupby(['patient_id', 'date_of_admission']).sum()
    print (df2)
                                   A
    patient_id date_of_admission    
    3          2017-01-02          3
    4          2017-01-01         16
    5          2017-01-01          8
    
    print (df2.index)
    MultiIndex(levels=[[3, 4, 5], [2017-01-01 00:00:00, 2017-01-02 00:00:00]],
               labels=[[0, 1, 2], [1, 0, 0]],
               names=['patient_id', 'date_of_admission'])
    
    df2 = df1.groupby(['patient_id', 'date_of_admission']).sum().reset_index()
    print (df2)
       patient_id date_of_admission   A
    0           3        2017-01-02   3
    1           4        2017-01-01  16
    2           5        2017-01-01   8
    
    df2 = df1.groupby(['patient_id', 'date_of_admission'], as_index=False).sum()
    print (df2)
       patient_id date_of_admission   A
    0           3        2017-01-02   3
    1           4        2017-01-01  16
    2           5        2017-01-01   8
    

    注意:第一个示例中省略了列 date_of_admission,而第二个示例中省略了列 X,因为 automatic exclusion of nuisance columns

    【讨论】:

      猜你喜欢
      • 2022-01-22
      • 2020-08-05
      • 1970-01-01
      • 2021-09-26
      • 1970-01-01
      • 2023-01-03
      • 1970-01-01
      • 1970-01-01
      • 2011-08-03
      相关资源
      最近更新 更多