在我对其进行分组后,如何访问新数据框中的列?

时间:2017-07-23 07:55:11

标签: python pandas dataframe indexing pandas-groupby

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

我运行Multiply Average

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

我如何制作' X'可以在df2中访问?我想它与数据帧的索引列有关,或者是这样,但我真的需要使用' X'在df2。

1 个答案:

答案 0 :(得分: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 multiple columns得到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