python - 将数据帧合并到多索引数据帧
问题描述
我有一个如下所示的数据框,它表明第 1 年的一些成本:
b1 b2
t1 100 110
t2 100 120
t3 150 180
我还有另一个数据框,它显示了这些年的成本乘数:
y1 y2 y3
t1 1 1.1 1.2
t2 1 1.08 1.15
我希望输出类似于以下内容(请注意,t3
它不在上面的数据框中,因此它的乘数为 1):
t1 b1 y1 100
y2 110
y3 120
b2 y1 110
y2 121
y3 132
t2 b1 y1 100
y2 108
y3 115
b2 y1 120
y2 129.6
y3 138
t3 b1 y1 150
y2 150
y3 150
b2 y1 180
y2 180
y3 180
我怎样才能做到这一点?
非常感谢您提前提供的帮助。
解决方案
使用merge
后stack
newdf=df1.stack().reset_index().merge(df2.stack().reset_index(),on='level_0')
newdf.assign(v=newdf['0_x']*newdf['0_y']).set_index(['level_0','level_1_x','level_1_y']).v
Out[133]:
level_0 level_1_x level_1_y
t1 b1 y1 100.0
y2 110.0
y3 120.0
b2 y1 110.0
y2 121.0
y3 132.0
t2 b1 y1 100.0
y2 108.0
y3 115.0
b2 y1 120.0
y2 129.6
y3 138.0
Name: v, dtype: float64
推荐阅读
- python - 如何将我的字符串拆分为带有分隔符异常的嵌套字典?
- vbscript - 无法从 vbscript 更新测试集中的测试人员名称
- android - com.google.android.gms.ads 的 NullPointerException
- google-cloud-platform - 我想识别Terraform的执行环境的公网IP并添加到防火墙规则中
- machine-learning - 一种更不平衡的compute_class_weight方法
- c# - 如何访问在 Azure AKS 上配置的 RabbitMQ 集群以在队列上发送消息?
- stata - 使用 for 循环删除递归回归中的实体
- c# - 如何定位(世界空间)画布文本以在 Unity 中创建尺寸叠加
- angular - 在角度服务中初始化时,array.some 在运行 ng-test 期间不是函数
- python - Kivy 和 PyUpdater 日志之间的冲突