Python 通过在数据帧中运行最大值替换值
我有一个数据帧的格式Python 通过在数据帧中运行最大值替换值,python,pandas,dataframe,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
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按时间进行排序。现在,我想用迄今为止看到的最大值替换a
和b
中的值。我想我可以对每组应用滚动最大值,但有没有更好的方法来实现这一点?有点像累积最大值?:)
您必须为每个组调用它,但它胜过for循环,您也必须为每个组调用它。列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
我确实执行了df['a']=df.groupby('id')['a'].apply(pd.cummax)
,但这给出了一个错误AttributeError:'module'对象没有属性“cummax”
。不太清楚如何使用cummax!谢谢:)这些答案有帮助吗?