通过在pandas数据帧中运行最大值来替换值



我有一个格式的数据帧

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进行排序。现在,我想用迄今为止看到的最大值替换ab中的值。我想我可以对每组应用滚动最大值,但有更好的方法吗?

有点像累积最大值?:)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

最新更新