【发布时间】:2021-12-31 14:17:54
【问题描述】:
我正在使用两个数据框:
-
df包含一列be/me用于 20 年期间(每月)的股票。 -
df2,df的子集(仅包含某些股票,仅适用于 6 月)包含decile列,通过pd.qcut()方法创建,基于 @ 的更改版本,在 20 年期间的每一年987654327@的be/me。
考虑到我在df2 中创建的十分位数,我想知道是否可以根据df2 的decile 列对df 的be/me 进行排名。换句话说,我想知道是否可以将df 的be/me 值分配给df2 中创建的十分位数。
请参阅下面的数据框以更好地了解该问题:
df
date stock_id be/me
2000-01-31 1004.0 0.3
2000-02-29 1004.0 0.7
2000-03-31 1004.0 1.2
2000-04-30 1004.0 2.3
2000-05-31 1004.0 0.9
... ... ...
2020-12-31 3900.0 1.7
2020-12-31 3900.0 2.8
2020-12-31 3900.0 3.0
2020-12-31 3900.0 0.2
2020-12-31 3900.0 2.1
1218855 rows × 3 columns
df2['deciles'] = df2.groupby('date')['be/me'].transform(lambda x: pd.qcut(x, 10, labels=False, duplicates = 'drop'))
df2
date stock_id be/me deciles
2000-06-30 2061.0 0.653684 5
2000-06-30 4383.0 0.053660 2
2000-06-30 13561.0 0.092509 2
2000-06-30 4065.0 1.342187 6
2000-06-30 2731.0 0.235582 3
... ... ... ...
2020-06-30 7022.0 0.072534 2
2020-06-30 30990.0 1.071096 6
2020-06-30 22867.0 1.627155 6
2020-06-30 15247.0 0.051387 2
2020-06-30 61574.0 1.684690 6
24095 rows × 4 columns
注意:date 的类型为 datetime,并且对于每个日期,都有多个股票 (stock_id)。
非常感谢您的宝贵时间。
编辑
我想要做的是检查df2-created 原始be/me 值(来自原始数据框df)适合哪个十分位。预期的输出应该是df 中的一个新列,df2 创建的十分位数归因于df 中的每个be/me 值。
如果需要任何额外的说明,请告诉我。
我创建了一个函数,该函数循环遍历十分位数以获取df2 中每个date 的最大十分位数。不确定我是否朝着正确的方向前进,因为输出是一个没有 date 的数组...看看下面:
In: def attribution(deciles,dates):
deciles = df2['deciles'].unique()
dates = df2.index.unique()
body_max = []
body_min = []
for x in deciles:
for y in dates:
body_max.append(df2[df2['deciles'] == x].loc[y]['be/me'].max())
body_min.append(df2[df2['deciles'] == x].loc[y]['be/me'].min())
return body_max, body_min
In: attribution(deciles, dates)
Out: [0.9343106070197438,
1.2747264875802489,
1.9700461181925901,
0.7888946814157697,
0.9304702071896337,
0.9651423313922733,
0.7238677612487585,
1.0358317574924074,
...]
【问题讨论】:
-
能否添加一个包含预期输出的示例数据框?
-
请参阅上面的编辑,@user17242583。谢谢。
标签: python pandas dataframe variable-assignment finance