我想将“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具有GroupBy.transform与功能first的系列大小相同的像原来的数据帧,所以可能多个值:
first = df['B'].groupby([df.index.get_level_values(0).to_period('m'), lvl1]).transform('first')
df['C'] = df['A'] * first








暂无数据