如何用for循环/列表推导式及DataFrame实现列表元素递差计算
实现方法
一、纯列表场景实现
方法1:enumerate遍历实现
通过enumerate获取元素索引,索引为0时直接保留原数,其他位置用当前元素减去前一位元素:
list1 = [3, 4, 6, 8, 13] list2 = [] for idx, num in enumerate(list1): if idx == 0: list2.append(num) else: list2.append(num - list1[idx-1]) print(list2) # 输出: [3, 1, 2, 2, 5]
方法2:列表推导式实现
用zip将原列表与“原列表去掉首元素”的序列配对,再拼接首元素完成计算:
list1 = [3, 4, 6, 8, 13] list2 = [list1[0]] + [curr - prev for curr, prev in zip(list1[1:], list1[:-1])] print(list2) # 输出: [3, 1, 2, 2, 5]
二、DataFrame场景实现
利用pandas的diff()方法直接计算相邻元素差值,首元素会生成NaN,用fillna()替换为原列的首值即可:
import pandas as pd df = pd.DataFrame({'list1': [3, 4, 6, 8, 13]}) df['list2'] = df['list1'].diff().fillna(df['list1'].iloc[0]) # 若需要整数类型,可追加类型转换: df['list2'] = df['list2'].astype(int) print(df)
执行后输出结果:
list1 list2 0 3 3 1 4 1 2 6 2 3 8 2 4 13 5
内容的提问来源于stack exchange,提问作者krawall
相关产品推荐
相关产品推荐

