我希望将'A‘列中的值乘以'B’栏中月份第一天的值,因此在1/2017中,BTC为0.27,ETH为0.83。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‘是预期的输出。
发布于 2019-03-11 09:11:32
首先在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与GroupBy.transform一起使用,函数first用于与原始DataFrame相同大小的系列,因此可能有多个值:
first = df['B'].groupby([df.index.get_level_values(0).to_period('m'), lvl1]).transform('first')
df['C'] = df['A'] * firstprint (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.48https://stackoverflow.com/questions/55098315
复制相似问题