我有一个格式的数据帧
id time a b
01 01 1 0
01 02 0 1
01 03 0 0
02 01 0 0
02 02 1 0
02 03 1 1
02 04 0 0
所以现在,输出应该是
id time a b
01 01 1 0
01 02 1 1
01 03 1 1
02 01 0 0
02 02 1 0
02 03 1 1
02 04 1 1
这里,我按id
进行分组,对于每个id
,df按time
进行排序。现在,我想用迄今为止看到的最大值替换a
和b
中的值。我想我可以对每组应用滚动最大值,但有更好的方法吗?
有点像累积最大值?:)http://pandas.pydata.org/pandas-docs/version/0.17.1/generated/pandas.DataFrame.cummax.html
你必须为每个小组打电话,但它胜过了for循环,你也必须为每个组打电话。
可以使用cummax函数将列a和b替换为它们的累积最大值,就像acdr建议的那样。
这是一条班轮:
df[["a","b"]] = df.groupby("id").cummax()[["a","b"]]
输出:
id time a b
0 1 1 1 0
1 1 2 1 1
2 1 3 1 1
3 2 1 0 0
4 2 2 1 0
5 2 3 1 1
6 2 4 1 1