通过在pandas dataframe中运行最大值来替换值

时间:2015-12-28 15:42:03

标签: python pandas dataframe

我有一个格式为

的数据框
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中的值替换为目前为止看到的最大值。我想我可以对每个组应用最大滚动但是有更好的方法吗?

2 个答案:

答案 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