熊猫:根据其他列值获取一列的最大值

时间:2018-08-07 14:13:27

标签: pandas pandas-groupby calculated-columns

我有一个熊猫数据框,如下所示:

ID  date      num
1   2018-03-28  3
1   2018-03-29  1
1   2018-03-30  4
1   2018-04-04  1
2   2018-04-03  1
2   2018-04-04  6
2   2018-04-10  3
2   2018-04-11  4

由以下代码创建:

import pandas as pd
df = pd.DataFrame({'ID': [1, 1, 1, 1, 2, 2, 2, 2], 'date': ['2018-03-28', 
'2018-03-29', '2018-03-30', '2018-04-04', '2018-04-03', '2018-04-04',
'2018-04-10', '2018-04-11'], 'num': [3,1,4,1,1,6,3,4]})

我想要创建一个名为“ maxnum”的新列,其中填充了该行中的日期和所有较早日期的每个ID的num最大值。该列如下所示:

ID  date    maxnum  num
1   2018-03-28  3   3
1   2018-03-29  3   1
1   2018-03-30  4   4
1   2018-04-04  4   1
2   2018-04-03  1   1
2   2018-04-04  6   6
2   2018-04-10  6   3
2   2018-04-11  6   4

有人知道我如何正确,有效地编程此列吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

使用cummax(假设您的数据框已按date排序,如果没有 运行遮罩线)

#df.date=pd.to_datetime(df.date)
#df=df.sort_values('date')
df.groupby('ID').num.cummax()
Out[258]: 
0    3
1    3
2    4
3    4
4    1
5    6
6    6
7    6
Name: num, dtype: int64