我试图将每个gvkey的rp的中值分配给每个NaN值。我可以使用以下for循环来做到这一点:
for i in range(df.shape[0]):
if df.iloc[i]['rp']!=1 and df.iloc[i]['rp']!=0:
df.iloc[i]['rp']=df['rp'][df['gvkey']==df.iloc[i]['gvkey']].median()
但是必须有一种没有for循环的方法。
数据集的示例如下:
gvkey rp cliff
1004.0 0 0
1004.0 0 0
1004.0 NaN 0
1005.0 1 1
1005.0 1 0
1005.0 0 1
1005.0 NaN 0
使用时,Dataframe.groupby
就grpkey
和改造列rp
使用median
,再使用Series.fillna
,以填补在列的缺失值rp
:
df['rp'] = pd.to_numeric(df['rp'], errors='coerce')
df['rp'] = df['rp'].fillna(df.groupby('gvkey')['rp'].transform('median'))
结果:
# print(df)
gvkey rp cliff
0 1004.0 0.0 0
1 1004.0 0.0 0
2 1004.0 0.0 0
3 1005.0 1.0 1
4 1005.0 1.0 0
5 1005.0 0.0 1
6 1005.0 1.0 0
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句