如何使用pandas按7行分组将列表值减去数据列并忽略-9999与0
实现代码
import pandas as pd # 转换字符串格式的T为整型列表 T = list(map(int, ['23','22','13','25','33','21','20'])) # 读取单列数据文件,无表头时读取后列名设为col df = pd.read_csv('你的数据文件路径.txt', names=['col']) # 写法1:用where方法直接条件赋值 df['new'] = (df['col'] - df.index.map(lambda x: T[x % 7])).where(~df['col'].isin([-9999, 0]), 0) # 写法2:沿用你已有的mask代码片段实现 # tmp = df.mask(df.isin([-9999, 0])) # df['new'] = (tmp['col'] - tmp.index.map(lambda x: T[x % 7])).fillna(0) print(df)
逻辑说明
- 用
df.index % 7实现每7行自动分组,每组内的行位置和T的索引一一对应,适配任意7的整数倍长度的输入数据 - 两种写法都可以实现需求:col值为
-9999或0时new列返回0,其余情况返回col减去对应位置T的值,输出结果和你给出的预期完全一致。
内容的提问来源于stack exchange,提问作者Nat
相关产品推荐
相关产品推荐

