迭代pandas DataFrame列时如何使用lambda函数实现跨索引计算
跨索引计算高效实现方案
最优向量化方案(推荐)
pandas 内置的向量化操作底层由C实现,执行效率远高于Python层面的for循环、map/reduce等高阶函数,是处理这类需求的首选。你需要的相邻元素相乘逻辑可以通过shift()方法快速实现:
import pandas as pd sensor_data = {'Sensor': ['A', 'B', 'C', 'D', 'E'], 'val': [20, 2 , 2, 19, 18]} df = pd.DataFrame(sensor_data) # 跨索引相邻相乘计算 cross_index_computation_result = (df['val'] * df['val'].shift(1)).dropna().astype(int).tolist() print(cross_index_computation_result) # 输出:[40, 4, 38, 342]
逻辑说明
df['val'].shift(1)会将val列的所有元素向下偏移1位,偏移后的第i个元素对应原始序列的第i-1个元素,首位自动填充为NaN- 两列直接相乘即可得到所有相邻元素的乘积结果,再通过
dropna()去掉首位的NaN值,转成列表即可得到目标结果
高阶函数实现方案(如果需要用map类逻辑)
如果你需要用类似你示例中的map逻辑实现,可以通过zip配对相邻元素后计算,实现如下:
cross_index_computation_result = list(map(lambda x: x[0]*x[1], zip(df['val'][:-1], df['val'][1:])))
逻辑说明
df['val'][:-1]是去掉最后一个元素的原始序列,df['val'][1:]是去掉第一个元素的原始序列- 通过
zip将两个序列按位置配对,每对元素就是相邻的两个值,传入lambda相乘即可得到结果
内容的提问来源于stack exchange,提问作者raphael
相关产品推荐
相关产品推荐

