如何用Pandas实现两个DataFrame的特定乘法生成新DataFrame?
解决方法
你要的是把df1的val和df2每个年份对应的val做乘积生成新的年份列,直接用Pandas的广播特性就能搞定,不用转矩阵,步骤如下:
- 先把df2转成以年份为索引的Series,方便后续匹配:
yr_vals = df2.set_index('yr')['val']
- 用df1的
val和这个Series做乘法,Pandas会自动广播,生成包含所有年份列的DataFrame:
year_cols = df1['val'].mul(yr_vals)
- 最后把这个年份列的DataFrame和原df1拼接起来,就是目标结果:
df = pd.concat([df1, year_cols], axis=1)
完整代码示例:
import pandas as pd # 初始化df1和df2 df1 = pd.DataFrame({'id':['a','b','c'], 'val':[1,2,3]}) df2 = pd.DataFrame({'yr':['2010','2011','2012'], 'val':[4,5,6]}) # 生成年份列 yr_vals = df2.set_index('yr')['val'] year_cols = df1['val'].mul(yr_vals) # 拼接得到目标df df = pd.concat([df1, year_cols], axis=1) print(df)
运行后输出就是你要的结果:
id val 2010 2011 2012 0 a 1 4 5 6 1 b 2 8 10 12 2 c 3 12 15 18
这个方法完全用Pandas原生操作实现,比转矩阵更简洁,也更贴合Pandas的使用习惯。
内容的提问来源于stack exchange,提问作者itthrill
相关产品推荐
相关产品推荐

