You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas倒序分组后,若组首元素为1则置组内其余元素为0

DataFrame倒序分组后按组首值修改组内元素

原始数据

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'day': [1,2,3,4,5,6,7,8],
    'first mover': [1,1,0,0,0,1,0,1]
})

对应表格:

dayfirst mover
11
21
30
40
50
61
70
81

需求

将DataFrame按从下到上(倒序)每4行分组,若每组首行的first mover值为1,则将组内其余所有行的first mover设为0,最终恢复原行顺序。

完整实现代码

N = 4

processed_df = (
    df.iloc[::-1]  # 倒序数据,将"从下到上分组"转为常规的从上到下分组
    .groupby(np.arange(len(df)) // N)  # 生成每4行一组的分组键
    .apply(lambda g: g.assign(
        **{'first mover': 
           np.where(g.index != g.index[0], 0, g['first mover']) 
           if g['first mover'].iloc[0] == 1 
           else g['first mover']}
    ))
    .reset_index(level=0, drop=True)  # 移除分组产生的额外索引
    .iloc[::-1]  # 恢复原数据的行顺序
)

print(processed_df)

代码逻辑说明

  1. 倒序数据:df.iloc[::-1]反转原数据,把"从下到上每4行分组"转化为反转后从上到下的常规分组,简化操作。
  2. 分组:np.arange(len(df))//N生成连续整数分组键,确保每4行被分到同一组。
  3. 组内修改逻辑:
    • 对每个分组,先判断组内第一行的first mover是否为1;
    • 若是,用np.where将组内除第一行外的所有first mover设为0,第一行保留原值;
    • 若不是,保持组内数据不变。
  4. 恢复原顺序:处理完成后再次反转数据,得到符合原行顺序的结果。

输出结果

day  first mover
0    1            1
1    2            0
2    3            0
3    4            0
4    5            0
5    6            0
6    7            0
7    8            0

内容的提问来源于stack exchange,提问作者prem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 05:12:43