在python中,如何在没有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

我试图将每个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
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,这是我需要的。