如何在Python

时间:2016-01-22 01:05:59

标签: python pandas aggregate

我创建了一个数据框,并将分组和聚合的时间戳设置为每个分组的最小值和最大值 结果数据框看起来像这样 DF被定义为patient_id,时间戳 我通过patient_id对DF进行了分组 然后我想得到每个组的最小和最大时间戳 我做了这个

bypatient_date = pd.DataFrame(byencounter.agg({'timestamp' : [np.min,np.max]})).reset_index())

  patient_id  timestamp            
              amin        amax
0         19  3396-08-21  3396-08-25
1         99  2723-09-27  2727-03-17
2       3014  2580-12-02  2581-05-01
3      24581  3399-07-19  3401-04-13

我正在尝试找出每个patient_id的最小值和最大值之间的差异,但我在尝试访问时间戳amin和timestamp amax中的值时遇到问题 有没有办法在没有循环但是使用内置pandas或numpy

的情况下执行此操作

1 个答案:

答案 0 :(得分:2)

只需删除列索引的最外层,如此SO post所示。然后,aminamax可以作为自己的列进行访问,您可以从中获取差异:

bypatient_date = pd.DataFrame(byencounter.groupby('patient_id').\
                              agg({'timestamp' : [np.min, np.max]})).reset_index(drop=True)

bypatient_date.columns = bypatient_date.columns.droplevel(0)
bypatient_date['datediff'] = bypatient_date['amax'] - bypatient_date['amin']