如何对DataFrame每列执行运算并在列旁插入结果新列?
问题描述
我需要对pandas DataFrame的每一列执行运算,原DataFrame结构如下:
| c0 | c1 | c2 |
|---|---|---|
| 1 | 2 | 3 |
| 2 | 3 | 4 |
运算规则:使用列表v1=[0,1,1,2,3,4,5]中对应位置的元素,用原列的值减去该元素(即运算结果 = 原列值 - v1对应位置元素),其中v1的第1个值对应第1列,第2个值对应第2列,以此类推。
示例:针对第一列创建右侧新列时,计算逻辑为(1-0)=1、(2-0)=1。
我已尝试为最后一列添加新列的代码:
df[7]=(df[6]-5)
但我需要对所有列实现此操作,即每列右侧都插入对应的运算结果新列,预期输出如下:
| c0 | c1 | c2 | c3 | c4 | c5 |
|---|---|---|---|---|---|
| 1 | (1-0)=1 | 2 | (2-1)=1 | 3 | (3-1)=2 |
| 2 | (2-0)=1 | 3 | (3-1)=1 | 4 | (4-1)=3 |
解决方案
可以通过遍历原DataFrame的列,依次计算并插入新列到对应原列的右侧,具体代码如下:
import pandas as pd # 构造原DataFrame df = pd.DataFrame({ 'c0': [1, 2], 'c1': [2, 3], 'c2': [3, 4] }) v1 = [0, 1, 1, 2, 3, 4, 5] # 遍历原列的索引和列名 for idx, col in enumerate(df.columns): # 生成带计算逻辑的字符串结果(若只需数值结果,替换为 result = df[col] - v1[idx]) result = df[col].apply(lambda x: f'({x}-{v1[idx]})={x - v1[idx]}') # 生成新列名,按预期输出命名为c3、c4、c5 new_col = f'c{idx + 3}' # 插入新列到原列右侧 df.insert(idx + 1, new_col, result) print(df)
关键说明
- 利用
enumerate遍历列时同时获取列索引,对应v1中的元素位置,保证运算对应关系正确。 - 使用
df.insert方法指定插入位置为当前列索引+1,确保每列后紧跟运算结果列。 - 若不需要显示计算逻辑字符串,只需保留数值结果,将
result行替换为result = df[col] - v1[idx]即可。
内容的提问来源于stack exchange,提问作者user19810659
相关产品推荐
相关产品推荐

