对新数据框进行分组后,如何访问该列?
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.
假设 '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.