我有一个格式为
的数据框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
中的值替换为目前为止看到的最大值。我想我可以对每个组应用最大滚动但是有更好的方法吗?
答案 0 :(得分:0)
有点像累计最大值? :) http://pandas.pydata.org/pandas-docs/version/0.17.1/generated/pandas.DataFrame.cummax.html
您必须为每个群组调用它,但它会击败for循环,您也必须为每个群组执行此操作。
答案 1 :(得分:0)
a和b列可以用cummax function替换为它们的累积最大值,如建议的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