Python 基于多个条件替换groupby中的值
我的问题与此相关,但我仍然不知道如何将答案应用于我的问题。我有这样一个数据帧:Python 基于多个条件替换groupby中的值,python,pandas,dataframe,Python,Pandas,Dataframe,我的问题与此相关,但我仍然不知道如何将答案应用于我的问题。我有这样一个数据帧: df = pd.DataFrame({ 'date': ['2001-01-01', '2001-02-01', '2001-03-01', '2001-04-01', '2001-02-01', '2001-03-01', '2001-04-01'], 'cohort': ['2001-01-01', '2001-01-01', '2001-01-01', '2001-01-01', '2001-0
df = pd.DataFrame({
'date': ['2001-01-01', '2001-02-01', '2001-03-01', '2001-04-01', '2001-02-01', '2001-03-01', '2001-04-01'],
'cohort': ['2001-01-01', '2001-01-01', '2001-01-01', '2001-01-01', '2001-02-01', '2001-02-01', '2001-02-01'],
'val': [100, 101, 102, 101, 200, 201, 201]
})
df
date cohort val
0 2001-01-01 2001-01-01 100
1 2001-02-01 2001-01-01 101
2 2001-03-01 2001-01-01 102
3 2001-04-01 2001-01-01 101
4 2001-02-01 2001-02-01 200
5 2001-03-01 2001-02-01 201
6 2001-04-01 2001-02-01 201
对于每个队列
,我想用val
的最大值替换val
的值,但仅用于date
小于与val
最大值相关联的日期
的观察。因此,行0、1和4将更改为如下所示:
df #This is what I want my final df to look like
date cohort val
0 2001-01-01 2001-01-01 102
1 2001-02-01 2001-01-01 102
2 2001-03-01 2001-01-01 102
3 2001-04-01 2001-01-01 101
4 2001-02-01 2001-02-01 201
5 2001-03-01 2001-02-01 201
6 2001-04-01 2001-02-01 201
如果没有很多循环,我怎么做呢
队列的val
的最大值
val
np执行矢量化比较和替换。其中
我不太明白。对于第二行,2001-02-01大于2001-01-01,那么为什么该行的val也被替换?第二行的更改是因为
日期小于与val
最大值关联的日期。您是指每个组还是整个数据帧?是。。。。。。。。。。。。
v = df.groupby('cohort').val.transform('max')
df['val'] = np.where(
df.date <= df.set_index('cohort').val.idxmax(), v, df.val
)
df
date cohort val
0 2001-01-01 2001-01-01 102
1 2001-02-01 2001-01-01 102
2 2001-03-01 2001-01-01 102
3 2001-04-01 2001-01-01 101
4 2001-02-01 2001-02-01 201
5 2001-03-01 2001-02-01 201
6 2001-04-01 2001-02-01 201