我有一个面板数据的多索引数据框,显示了一段时间内的历史价格.我基本上想要做的是将它们按时间平均预测(高于0.4),中等(0.2到0.4)和低(低于0.2)进行分组.
price yield forecast
date assetid
1/1/2017 4200 96.44 0.23 0.64
1/1/2017 408 46.3 0.6 0.4
1/1/2017 413 50.68 0.47 0.73
1/1/2017 3911 82.48 0.33 0.84
1/1/2017 7392 97.24 0.4 0.62
1/1/2017 7144 31.86 0.18 0.54
1/1/2017 8793 59.66 0.65 0.9
1/2/2017 4200 57.1 0.21 0.69
1/2/2017 408 4.76 0.86 0.16
1/2/2017 413 70.79 0.24 0.12
1/2/2017 3911 5.43 0.91 0.44
1/2/2017 7392 47.33 0.51 0.18
1/2/2017 7144 17.85 0.79 0.59
1/2/2017 8793 98.08 0.2 0.24
因此,我需要弄清楚的第一步是如何创建一个返回每个资产的平均值的表.
assetid Average of forecast
408 0.73
413 0.355
3911 0.62
4200 0.22
7144 0.485
7392 0.455
8793 0.425
然后,我必须加入这个新创建的表并匹配assetid,随着时间的推移具有相同的分类.
price yield forecast type
date assetid
1/1/2017 4200 96.44 0.23 0.64 med
1/1/2017 408 46.3 0.6 0.4 high
1/1/2017 413 50.68 0.47 0.73 med
1/1/2017 3911 82.48 0.33 0.84 med
1/1/2017 7392 97.24 0.4 0.62 high
1/1/2017 7144 31.86 0.18 0.54 low
1/1/2017 8793 59.66 0.65 0.9 high
1/2/2017 4200 57.1 0.21 0.69 med
1/2/2017 408 4.76 0.86 0.16 high
1/2/2017 413 70.79 0.24 0.12 med
1/2/2017 3911 5.43 0.91 0.44 med
1/2/2017 7392 47.33 0.51 0.18 high
1/2/2017 7144 17.85 0.79 0.59 low
1/2/2017 8793 98.08 0.2 0.24 high
解决方法:
pd.cut变换
df['type']=pd.cut(df.groupby(level='assetid')
.forecast
.transform('mean'),[0,0.2,0.4,np.inf],labels=['low','med','high'])
df
Out[663]:
price yield forecast type
date assetid
1/1/2017 4200 96.44 0.23 0.64 high
408 46.30 0.60 0.40 med
413 50.68 0.47 0.73 high
3911 82.48 0.33 0.84 high
7392 97.24 0.40 0.62 med
7144 31.86 0.18 0.54 high
8793 59.66 0.65 0.90 high
1/2/2017 4200 57.10 0.21 0.69 high
408 4.76 0.86 0.16 med
413 70.79 0.24 0.12 high
3911 5.43 0.91 0.44 high
7392 47.33 0.51 0.18 med
7144 17.85 0.79 0.59 high
8793 98.08 0.20 0.24 high
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。