【发布时间】:2020-12-05 02:07:41
【问题描述】:
我有两个数据框; A 包含分配分数,B 包含每小时量。为了在给定小时内为每条总线获得正确的音量,我需要将 A 与数据帧 B 的每一行相乘。对于给定的小时 (x),这将是 A * B.loc[x] 的简单乘法。
A = col_a col_b col_c col_d col_e
0 0.0 0.0 0.0 0.0 1.0
1 0.0 0.0 1.0 0.0 0.0
2 0.0 1.0 0.0 0.5 0.0
3 0.5 0.0 0.0 0.5 0.0
4 0.5 0.0 0.0 0.0 0.0
B = col_a col_b col_c col_d col_e
0 12881 598 154 180 0.0
1 12881 680 154 180 0.0
2 11617 806 154 180 0.0
3 12991 100 154 180 0.0
但是,我想一次对每个小时进行一次乘法运算,并创建一个大型多索引数据帧 C。
C = col_a col_b col_c col_d col_e
hr bus
0 0 0.0 0.0 0.0 0.0 0.0
1 0.0 0.0 154.0 0.0 0.0
2 0.0 598.0 0.0 90.0 0.0
3 6440.5 0.0 0.0 90.0 0.0
4 6440.5 0.0 0.0 0.0 0.0
1 0 0.0 0.0 0.0 0.0 0.0
1 0.0 0.0 154.0 0.0 0.0
2 0.0 680.0 0.0 90.0 0.0
我设法通过列表操作创建了这个数据帧并覆盖了结果数据帧的索引。我不认为这是一个很好的做法,想知道是否有更好的方法不需要覆盖索引?
dfs = [A.mul(B.loc[i]) for i in B.index]
C = pandas.concat(dfs)
C.index = pandas.MultiIndex.from_product([B.index, A.index], names=['hr', 'bus'])
【问题讨论】:
标签: python python-3.x pandas dataframe multiplication