Python如何基于条件为DataFrame后续连续11个月分配相同值
实现方法
首先请确保你的DataFrame已经按照accountid、Year、Month三个字段升序排序,保证时间顺序正确。
通用方案(适配多账户、多年份场景)
核心逻辑是按账户、年份分组后,对Value列取累积最大值:只要某个月的Value出现过1,后续所有月份的累积最大值都会保持为1,刚好匹配需求。
代码示例:
import pandas as pd # 构造示例数据 data = { 'accountid': ['xyz']*12, 'Year': [2019]*12, 'Month': list(range(1,13)), 'Value': [0,0,0,1] + [0]*8 } df = pd.DataFrame(data) # 排序保证时间顺序 df = df.sort_values(by=['accountid', 'Year', 'Month']).reset_index(drop=True) # 分组取累积最大值,实现1向后覆盖 df['Value'] = df.groupby(['accountid', 'Year'])['Value'].cummax()
运行后得到的结果就是2019年4-12月的Value全部为1,1-3月保持为0。
精准指定起始点方案
如果你只需要针对特定账户、特定年份的某个起始月份向后赋值,可以用精准定位的写法:
# 定位目标起始行的索引 start_idx = df[(df['accountid'] == 'xyz') & (df['Year'] == 2019) & (df['Month'] == 4)].index[0] # 给同账户同一年起始行及之后的所有行Value赋值为1 df.loc[(df['accountid'] == 'xyz') & (df['Year'] == 2019) & (df.index >= start_idx), 'Value'] = 1
内容的提问来源于stack exchange,提问作者Anonymous
相关产品推荐
相关产品推荐

