python - 将两个具有相同列名但索引不同的数据框相乘
问题描述
我有两个数据框,一个带有数据,一个带有预测假设列表。列名对应,但索引级别不对应(根据设计)。请告诉我如何将 df1 中的 A、B 和 C 列乘以 df2 中的相关列,如下面的示例所示,并且原始数据帧的其余部分(又名 D 列)完好无损。谢谢!
df1list=[1,2,3,4,5,6,7,8,9,10]
df2list=[2017]
df = pd.DataFrame(np.random.randint(0,100,size=(10, 4)), columns=list('ABCD'), index=list(df1list))
df2 = pd.DataFrame(np.random.randint(1,4,size=(1, 3)), columns=list('ABC'), index=list(df2list))
解决方案
>>> df[['A','B','C']] * df2.values
A B C
1 81 168 116
2 21 8 6
3 147 108 52
4 54 64 114
5 48 16 20
6 72 116 12
7 36 188 178
8 90 96 162
9 63 166 156
10 120 22 10
所以要覆盖你可以这样做:
df.loc[:,['A','B','C']] = df[['A','B','C']] * df2.values
我想你可以做更多的程序化:
df[df2.columns] *= df2.values
推荐阅读
- bootstrap-datetimepicker - Bootstrap datetimepicker 在用户选择之前填充日期字段
- python - 用到目前为止出现的次数替换字符串的每次出现
- javascript - Linux/PHP/JS:如何使用浏览器脚本在服务器上播放 mp3 音乐?
- xamarin - 带有 BlinkId OCR 图像结果的 Xamarin 表单
- java - 选择随机数组元素
- javascript - React Native - 如何选择图像然后发送到另一个屏幕
- java - Maven 清理问题 - 不可解析的导入 POM - 无法从 NEXUS 传输工件
- java - doThrow() 有效,但 thenThrow() 无效
- r - 使用批处理文件中的共享网络的连接字符串
- node.js - 在 heroku 上部署节点后端后出现错误 503。有谁知道为什么会这样?