python - 如何将另一列上的一列乘以该月第一天的值
问题描述
我想将 'A' 列中的值乘以 'B' 列中每月第一天的值,因此在 1/2017 中,BTC 为 0.27,ETH 为 0.83。2017 年 2 月,BTC 为 0.16,ETH 为 0.88。
我有以下数据框:
Date' Symbol' A' B' 'C'
1/1/2017 BTC 22 0.27 5.94
ETH 21 0.83 17.43
1/2/2017 BTC 23 0.26 6.21
ETH 24 0.88 19.02
1/3/2017 BTC 25 0.28 6.75
ETH 21 0.84 17.43
1/4/2017 BTC 24 0.22 6.48
ETH 23 0.83 19.09
... ... ...
1/30/2017 BTC 25 0.46 6.75
ETH 23 0.98 19.09
1/31/2017 BTC 12 0.27 3.24
ETH 11 0.73 9.13
2/1/2017 BTC 43 0.16 6.88
ETH 32 0.88 28.16
2/2/2017 BTC 24 0.26 3.84
ETH 21 0.55 18.48
“C”列是预期的输出。
解决方案
首先在第一级创建 DatetimeIndex MultiIndex
:
lvl0 = pd.to_datetime(df.index.get_level_values(0), format='%m/%d/%Y')
lvl1 = df.index.get_level_values(1)
df.index = [lvl0, lvl1]
然后将DatetimeIndex.to_period
withGroupBy.transform
和函数first
用于与原始 DataFrame 大小相同的系列,因此可能有多个值:
first = df['B'].groupby([df.index.get_level_values(0).to_period('m'), lvl1]).transform('first')
df['C'] = df['A'] * first
print (df)
A B C
Date Symbol
2017-01-01 BTC 22 0.27 5.94
ETH 21 0.83 17.43
2017-01-02 BTC 23 0.26 6.21
ETH 24 0.88 19.92
2017-01-03 BTC 25 0.28 6.75
ETH 21 0.84 17.43
2017-01-04 BTC 24 0.22 6.48
ETH 23 0.83 19.09
...
2017-01-30 BTC 25 0.46 6.75
ETH 23 0.98 19.09
2017-01-31 BTC 12 0.27 3.24
ETH 11 0.73 9.13
2017-02-01 BTC 43 0.16 6.88
ETH 21 0.88 18.48
2017-02-02 BTC 24 0.26 3.84
ETH 21 0.88 18.48
推荐阅读
- oracle - UCM中配置文件的路径是什么
- javascript - 何时使用网格项与何时不使用网格项对齐和对齐
- node.js - MERN 应用会话 cookie 在 Firefox 上工作,但在 chrome 和其他浏览器上不工作
- html - 将通用 css 应用到备用类
- flutter - 导航页面
- python - 从 yfinance 调用“下载”后出现 SSL 错误
- python - 如何使用python从网页内容中提取动态数字?
- python - skvideo + ffmpeg:无法设置二进制文件的路径
- typescript - Webpack serverless import typescipt only node_module 错误“找不到模块”
- python - Python DataFrame 查找值