如何用Python计算DataFrame指定列与另一DataFrame数值列的差值?
解决方法:生成包含差值列与Group列的df3
需求说明
现有两个DataFrame:df1和df2,需生成df3完成以下操作:
- 计算df2中
column_1至column_30共30个数值列与df1的column_X的差值 - 保留df2中的
Group列
生成df1和df2的代码
import pandas as pd from random import uniform import numpy as np # 生成df1 data = np.random.uniform(15,40, size=(60, 2)) df1 = pd.DataFrame(data, columns=['column_A','column_B']) df1['column_X'] = df1.mean(axis=1) df1 # 生成df2 data = np.random.uniform(10.5,32.8, size=(60, 30)) df2 = pd.DataFrame(data, columns=['column_1','column_2','column_3','column_4','column_5', 'column_6','column_7','column_8','column_9','column_10', 'column_11','column_12','column_13','column_14','column_15', 'column_16','column_17','column_18','column_19','column_20', 'column_21','column_22','column_23','column_24','column_25', 'column_26','column_27','column_28','column_29','column_30',]) df2["Group"] = pd.DataFrame(np.repeat(['A','B','C'], 20, axis=0)) # 将Group列移至首位 col = df2.pop('Group') df2.insert(0, 'Group', col) df2
高效生成df3的代码
无需手动逐个列计算,用批量处理更简洁:
# 提取df2的数值列(排除首列Group) numeric_cols = df2.columns[1:] # 批量计算差值,并重命名列名 diff_df = df2[numeric_cols].sub(df1['column_X'], axis=0) diff_df.columns = [f'col_{i}X_sub' for i in range(1, 31)] # 拼接Group列与差值列得到df3 df3 = pd.concat([df2['Group'], diff_df], axis=1)
代码说明
df2[numeric_cols].sub(df1['column_X'], axis=0):利用Pandas的sub方法,按行让df2每个数值列减去df1的column_X,自动完成30列的批量计算diff_df.columns = [f'col_{i}X_sub' for i in range(1, 31)]:将差值列统一重命名为col_1X_sub至col_30X_subpd.concat([df2['Group'], diff_df], axis=1):横向拼接Group列与所有差值列,得到最终df3
如果需要按示例的手动循环方式(适合理解原理):
# 创建df3并添加Group列 df3 = pd.DataFrame(df2['Group'].copy()) # 循环计算每列差值 for i in range(1, 31): df3[f'col_{i}X_sub'] = df2[f'column_{i}'] - df1['column_X']
内容的提问来源于stack exchange,提问作者nasa313
相关产品推荐
相关产品推荐

