基于多种条件替换分组中的值

2024-06-01 08:34:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我的问题与此有关,但我仍然不知道如何将答案应用于我的问题。我有这样一个数据帧:

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

对每个cohort进行分组,我想用最大值val替换{},但仅适用于{}小于与最大值{}相关联的date的观察。因此,第0、1和4行将更改为如下所示:

^{pr2}$

我怎么能在没有很多循环的情况下做到这一点呢?在


Tags: 数据答案dataframedfdate情况valpd
1条回答
网友
1楼 · 发布于 2024-06-01 08:34:24
  1. 确定每组cohortval的最大值
  2. 确定与val关联的最大日期
  3. 执行矢量化比较并替换为np.where

v = df.groupby('cohort').val.transform('max')
df['val'] = np.where(
    df.date <= df.set_index('cohort').val.idxmax(), v, df.val
)

^{pr2}$

相关问题 更多 >