基于起始行号数组批量填充pandas DataFrame指定列的实现问题
实现方法
这里提供两种常用实现方式,都可以直接得到你要的结果:
方法1:切片循环赋值(逻辑直观,适合新手理解)
import pandas as pd # 初始化数据 df = pd.DataFrame([['', 120], ['', 300], ['', 160],['', 220], ['', 400], ['', 560],['', 860],['',900]], columns=['SalesCode', 'Sales']) fillrows = [0,3,5] salescodes = ['XA','AC','BC'] # 补全区间结束边界,最后一个区间的结束为DataFrame总行数 fill_bounds = fillrows + [len(df)] # 遍历每个区间赋值 for idx in range(len(salescodes)): start_row = fill_bounds[idx] end_row = fill_bounds[idx+1] - 1 # 到下一个起始行的前一行 df.loc[start_row:end_row, 'SalesCode'] = salescodes[idx] print(df)
方法2:向量化区间切割(代码更简洁,大表性能更好)
利用pd.cut直接对行索引做区间划分,绑定对应的销售编码即可:
import pandas as pd df = pd.DataFrame([['', 120], ['', 300], ['', 160],['', 220], ['', 400], ['', 560],['', 860],['',900]], columns=['SalesCode', 'Sales']) fillrows = [0,3,5] salescodes = ['XA','AC','BC'] # 按行索引分区间,左闭右开匹配需求 df['SalesCode'] = pd.cut( df.index, bins = fillrows + [len(df)], labels = salescodes, right = False # 设为False才会匹配[起始行, 下一起始行)的区间规则 ) print(df)
两种方法运行后都会得到你要求的输出结果:
SalesCode Sales 0 XA 120 1 XA 300 2 XA 160 3 AC 220 4 AC 400 5 BC 560 6 BC 860 7 BC 900
内容的提问来源于stack exchange,提问作者j_90
相关产品推荐
相关产品推荐

