如何在两个不同DataFrame的列上应用自定义函数?
问题描述
现有两个DataFrame:
df1
unicorn size 0 blue 3 1 red 4 2 piNk 6
df2
unicorn size 0 blue 1 1 red 2
需要按列对这两个DataFrame的行应用自定义函数:
def some_operation(a, b): return a * b # 结合预期结果,此处逻辑为两数相乘
预期输出结果:
size A size B result 0 3 1 3 1 3 2 6 2 4 1 4 3 4 2 8 4 6 1 6 5 6 2 12
解决方案
要实现这个需求,核心是先获取两个DataFrame中size列的笛卡尔积(所有组合),再对每组组合应用自定义函数,具体步骤如下:
- 生成笛卡尔积
通过给两个DataFrame添加临时键,再做内连接来生成所有行组合:
import pandas as pd # 添加临时键用于连接 df1['key'] = 1 df2['key'] = 1 # 内连接生成所有组合,并重命名列 merged_df = pd.merge(df1, df2, on='key').rename(columns={ 'size_x': 'size A', 'size_y': 'size B' }) # 删除临时键 merged_df = merged_df.drop('key', axis=1)
- 应用自定义函数
使用apply方法对每行的目标列执行函数:
def some_operation(a, b): return a * b merged_df['result'] = merged_df.apply(lambda row: some_operation(row['size A'], row['size B']), axis=1)
- 输出最终结果
保留需要的列即可:
final_result = merged_df[['size A', 'size B', 'result']] print(final_result)
如果自定义函数逻辑就是简单的两列运算(比如这里的乘法),可以直接简化为列运算,效率更高:
merged_df['result'] = merged_df['size A'] * merged_df['size B']
内容的提问来源于stack exchange,提问作者Owen
相关产品推荐
相关产品推荐

