pandas 按照特定顺序输出

df.groupby() 以后按照特定顺序输出,方便后续做图,或者跟其余df对比做图。web

## 构造 pd.DataFrame
patient_id = ['71835318256532',
 '87791375711',
 '66979212649388',
 '46569922967175',
 '998612492555522',
 '982293214194',
 '89981833848',
 '17912315786975',
 '4683495482494',
 '1484143378533',
 '56866972273357',
 '7796319285658',
 '414462476158336',
 '449519578512573',
 '61826664459895']
week = ['tuesday',
 'tuesday',
 'wednesday',
 'monday',
 'tuesday',
 'monday',
 'friday',
 'tuesday',
 'monday',
 'friday',
 'saturday',
 'thursday',
 'wednesday',
 'thursday',
 'wednesday']
d = {'patient_id': patient_id, 'week':week}

test = pd.DataFrame(data=d)

## 聚类计数
test.groupby('week')['patient_id'].count()
## output
week
friday       2
monday       3
saturday     1
thursday     2
tuesday      4
wednesday    3
Name: patient_id, dtype: int64

## 按照特定顺序输出
ind = ['monday','tuesday','wednesday','thursday','friday','saturday']
test.groupby('week')['patient_id'].count()[ind]
## output
week
monday       3
tuesday      4
wednesday    3
thursday     2
friday       2
saturday     1
Name: patient_id, dtype: int64

做图效果以下svg

test.groupby('week')['patient_id'].count().plot(kind='bar');

这里写图片描述

ind = ['monday','tuesday','wednesday','thursday','friday','saturday']
test.groupby('week')['patient_id'].count()[ind].plot(kind='bar');

这里写图片描述