python - Python DataFrame:使用映射分解一列
问题描述
我正在尝试汇总时间序列并将其分解为其组成部分。例如,我有一个时间序列预测,我想在 3 个桶(红色、蓝色、oj)之间分解
import pandas as pd
import datetime as dt
index = pd.date_range(start = dt.date.today(), end = dt.date.today() + dt.timedelta(days = 400), freq = 'M')
df = pd.DataFrame(index = index)
df['Volume'] = [random.randint(340,950) for x in range(len(df))]
df
volume_breakdown = pd.Series({
"red":.5,
"blue":.3,
"oj":.2
})
volume_breakdown
试图乘法:
df * volume_breakdown
我知道这与索引有关,但是有没有办法在不使用 for 循环和进行 concat/join/merge 的情况下做到这一点?
编辑:用下面的答案解决,
pd.DataFrame(
df["Volume"].values.reshape((-1, 1)) * volume_breakdown.values, index = index, columns = volume_breakdown.index
)
解决方案
用于numpy
避免索引问题:
df[volume_breakdown.index] = df["Volume"].values.reshape((-1, 1)) \
* volume_breakdown.values
>>> df
Volume red blue oj
2021-05-31 722 361.0 216.6 144.4
2021-06-30 530 265.0 159.0 106.0
2021-07-31 762 381.0 228.6 152.4
2021-08-31 706 353.0 211.8 141.2
2021-09-30 811 405.5 243.3 162.2
2021-10-31 908 454.0 272.4 181.6
2021-11-30 912 456.0 273.6 182.4
2021-12-31 740 370.0 222.0 148.0
2022-01-31 692 346.0 207.6 138.4
2022-02-28 798 399.0 239.4 159.6
2022-03-31 497 248.5 149.1 99.4
2022-04-30 622 311.0 186.6 124.4
2022-05-31 589 294.5 176.7 117.8
推荐阅读
- amazon-dynamodb - DynamoDBMapper batchLoad 传入参数
- html - Highcharts:在图例悬停时突出显示折线图系列
- javascript - 为第二个 INSERT 检索第一个 INSERT 的 auto_incremented ID
- android - 从芯片中获取文本
- fancybox-3 - 所显示图像的高分辨率版本的 fancybox-3 下载链接
- macos - 如何在 AppleScript 中使用 sed 查找/替换 html 文件中的所有实例?
- spring-cloud-dataflow - 对于 python 语言,Spring Cloud Dataflow 可脚本化转换失败
- android - 尝试解密指纹时出现 BadPaddingException
- html - 如何强制 html 页面在 Safari 底部面板之前结束?
- python - 如何将消息从机器人(不是人)转发到聊天