对新数据框进行分组后,如何访问该列?

How do I access a column on the new data frame after I do a groupby on it?

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

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

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

如何使 'X' 在 df2 中可访问?我想这与数据框的索引列有关,但我确实需要在 df2.[​​=20=] 中使用 'X'。

需要 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()

如果按多列分组得到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.