python - 使用公共密钥在数据帧上广播系列乘法
问题描述
我有一个数据框和一个熊猫系列
数据框包含我需要用来乘以我的系列的权重。两个对象共享相同的密钥Key
以下是df
我拥有的数据框():
Col 3 5
Key Idx2
1 1 0.571429 0.000000
4 0.200000 0.000000
5 0.000000 0.228571
2 6 1.000000 0.000000
6 5 0.000000 1.000000
7 5 0.088235 0.882353
6 0.029412 0.000000
8 5 0.727273 0.272727
11 2 1.000000 0.000000
12 1 0.158730 0.000000
5 0.000000 0.595238
6 0.011905 0.000000
2 0.019841 0.000000
3 0.150794 0.063492
13 2 1.000000 0.000000
14 2 1.000000 0.000000
15 2 1.000000 0.000000
这是系列 ( s
) :
Key
1 106.0
2 270.0
3 378.0
4 78.0
5 80.0
6 0.0
7 0.0
8 0.0
9 0.0
10 0.0
11 0.0
12 0.0
13 0.0
14 0.0
15 0.0
我不确定如何正确地将两者相乘,以便保持 in 的形状df
并将每个值乘以 indf
对应的Key
值s
。
所需的输出将是:
Col 3 5
Key Idx2
1 1 60.57147 0.000000
4 21.20000 0.000000
5 0.000000 24.22853
2 6 270.0000 0.000000
6 5 0.000000 0.000000
7 5 0.000000 0.000000
6 0.000000 0.000000
8 5 0.000000 0.000000
11 2 0.000000 0.000000
12 1 0.000000 0.000000
5 0.000000 0.000000
6 0.000000 0.000000
2 0.000000 0.000000
3 0.000000 0.000000
13 2 0.000000 0.000000
14 2 0.000000 0.000000
15 2 0.000000 0.000000
我想要做的是使用df.mul
,但似乎这样我正在执行一个元素一个元素的乘法:
df.mul(s, fill_value = 0)
1 2 3 4 5 6 ... 10 11 12 13 14 15
Key Idx2 ...
1 1 NaN NaN 216.000000 NaN 0.000000 NaN ... NaN NaN NaN NaN NaN NaN
4 NaN NaN 75.600000 NaN 0.000000 NaN ... NaN NaN NaN NaN NaN NaN
5 NaN NaN 0.000000 NaN 18.285714 NaN ... NaN NaN NaN NaN NaN NaN
2 6 NaN NaN 378.000000 NaN 0.000000 NaN ... NaN NaN NaN NaN NaN NaN
6 5 NaN NaN 0.000000 NaN 80.000000 NaN ... NaN NaN NaN NaN NaN NaN
7 5 NaN NaN 33.352941 NaN 70.588235 NaN ... NaN NaN NaN NaN NaN NaN
6 NaN NaN 11.117647 NaN 0.000000 NaN ... NaN NaN NaN NaN NaN NaN
8 5 NaN NaN 274.909091 NaN 21.818182 NaN ... NaN NaN NaN NaN NaN NaN
11 2 NaN NaN 378.000000 NaN 0.000000 NaN ... NaN NaN NaN NaN NaN NaN
12 1 NaN NaN 60.000000 NaN 0.000000 NaN ... NaN NaN NaN NaN NaN NaN
5 NaN NaN 0.000000 NaN 47.619048 NaN ... NaN NaN NaN NaN NaN NaN
6 NaN NaN 4.500000 NaN 0.000000 NaN ... NaN NaN NaN NaN NaN NaN
2 NaN NaN 7.500000 NaN 0.000000 NaN ... NaN NaN NaN NaN NaN NaN
3 NaN NaN 57.000000 NaN 5.079365 NaN ... NaN NaN NaN NaN NaN NaN
13 2 NaN NaN 378.000000 NaN 0.000000 NaN ... NaN NaN NaN NaN NaN NaN
14 2 NaN NaN 378.000000 NaN 0.000000 NaN ... NaN NaN NaN NaN NaN NaN
15 2 NaN NaN 378.000000 NaN 0.000000 NaN ... NaN NaN NaN NaN NaN NaN
解决方案
对我来说工作axis=0
和level=0
参数DataFrame.mul
:
df = df.mul(s, axis=0, level=0)
print (df)
3 5
Key Idx2
1 1 60.571474 0.000000
4 21.200000 0.000000
5 0.000000 24.228526
2 6 270.000000 0.000000
6 5 0.000000 0.000000
7 5 0.000000 0.000000
6 0.000000 0.000000
8 5 0.000000 0.000000
11 2 0.000000 0.000000
12 1 0.000000 0.000000
5 0.000000 0.000000
6 0.000000 0.000000
2 0.000000 0.000000
3 0.000000 0.000000
13 2 0.000000 0.000000
14 2 0.000000 0.000000
15 2 0.000000 0.000000
推荐阅读
- r - 如何使用多个数据框填充空白数据
- java - 使用 WebMvcConfigurationSupport 而不是 WebMvcConfigurerAdapter 返回的空值
- twilio - 用 twilio 可编程语音呼叫客户时遇到问题
- jquery - 如何将表 td 值存储在数组中?
- java - ESP8266 上的 Websocket 客户端不向 spring-boot 服务器发送数据
- arrays - 如何将行(字符串数组)转换为数据框列
- twitter-bootstrap-3 - Bootstrap 3:在移动设备上将两列行分成两列一列
- c# - 由于类型不正确,CosmosDBTrigger 失败并出现绑定错误
- html - 如何删除 Safari 中 HTML5 视频上方/下方的额外空间?
- mysql - 使用元组作为外键