假设' X'是数据框df1中的一列,给出了分类值。
我运行Multiply Average
获取新的数据帧df2。当我打印df2时,我仍然可以看到' X'作为其中的一列。但不知何故,我无法使用df2 [' X']访问它。它甚至没有显示在df2=df1.groupby('X').sum()
中。
我如何制作' X'可以在df2中访问?我想它与数据帧的索引列有关,或者是这样,但我真的需要使用' X'在df2。
答案 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。