在python中,如何在没有for循环的情况下有条件地为给定的组分配中值?
我试图将每个gvkey的rp中值分配给每个NaN值。我可以用这个for循环来实现:在python中,如何在没有for循环的情况下有条件地为给定的组分配中值?,python,pandas,for-loop,group-by,list-comprehension,Python,Pandas,For Loop,Group By,List Comprehension,我试图将每个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
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
在grpkey
上使用,并使用median
变换列rp
,然后使用填充列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
在grpkey
上使用,并使用median
变换列rp
,然后使用填充列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
您可以在gvkey列上使用以下方法计算中值:
median_values=df.groupby('gvkey').median()
然后,您可以使用方法用计算出的中间值填充所有nan值。需要注意的是,fillna使用数据帧索引,因此需要设置新索引(用于计算中间值):
df.set_index('gvkey')。fillna(中值)。reset_index()
方法DataFrame.reset_index()用于返回“gvkey”列。您可以在gvkey列上使用方法计算中值:
median_values=df.groupby('gvkey').median()
然后,您可以使用方法用计算出的中间值填充所有nan值。需要注意的是,fillna使用数据帧索引,因此需要设置新索引(用于计算中间值):
df.set_index('gvkey')。fillna(中值)。reset_index()
方法DataFrame.reset_index()用于返回“gvkey”列。谢谢,但我得到了数据错误:没有要聚合的数值类型,可能是因为某些gvkey的中位数是NaN?对于某些gvkey最有可能都是NaN?rp列的数据类型是什么?谢谢,但我得到了数据错误:没有要聚合的数字类型,可能是因为对于某些gvkey,中位数是NaN?对于某些gvkey最有可能都是NaN?rp列的数据类型是什么?然后您是否会计算并分配gvkey的中值而不是rp?不,但这将在“rp”和“cliff”字段中填充NaN值OK,谢谢,Shubham Sharma的回答专门针对rp,这是我需要的。然后你不计算并分配gvkey的中值而不是rp吗?不,但它将在“rp”和“cliff”字段中填充nan值OK,谢谢,Shubham Sharma的回答专门针对rp,这是我需要的。