如何计算Pandas DataFrame列表列元素的递增步长并生成新列
解决方案
核心通过Pandas的apply()方法对changes列的每个列表元素执行自定义步长计算逻辑即可,完整实现代码如下:
import pandas as pd # 构造测试用DataFrame df = pd.DataFrame({ 'test': ['test03', 'test45', 'test07', 'test04', 'test09'], 'changes': [ [3, 8], [0, 5], [7, 8, 9, 0, 1, 2, 3, 4, 5, 6], [2, 4, 6, 8, 0], [0, 1, 9, 2, 3, 4, 5, 6, 7, 8] ] }) # 自定义步长计算函数 def calc_step(lst): # 先对列表做升序排序 sorted_lst = sorted(lst) # 计算所有相邻元素的差值 diffs = [sorted_lst[i+1] - sorted_lst[i] for i in range(len(sorted_lst)-1)] # 取差值的唯一值(题目已说明固定步长为1/2/5,唯一值仅一个) return next(iter(set(diffs))) # 新增steps列 df['steps'] = df['changes'].apply(calc_step) # 输出结果 print(df)
运行后输出结果和需求完全一致:
test changes steps 0 test03 [3, 8] 5 1 test45 [0, 5] 5 2 test07 [7, 8, 9, 0, 1, 2, 3, 4, 5, 6] 1 3 test04 [2, 4, 6, 8, 0] 2 4 test09 [0, 1, 9, 2, 3, 4, 5, 6, 7, 8] 1
如果需要兼容异常场景(比如列表存在误差导致差值不唯一),可以修改计算逻辑取出现频次最高的差值即可。
内容的提问来源于stack exchange,提问作者Leo
相关产品推荐
相关产品推荐

