Python 根据列值将分数填充到行中
我有一个这样的数据帧Python 根据列值将分数填充到行中,python,pandas,Python,Pandas,我有一个这样的数据帧 Example1: score_df ======== rid score Flag 1 5 y 1 6 n 1 7 y 1 8 n score_df ======== rid score Flag 1 5 n 1 6 y 1 6 n 1 6 n 当Flag='y'首先出现时,我需要将分数复制到其余行。在本例中,当分数为5时,第一行上出现flag=y。我会将
Example1:
score_df
========
rid score Flag
1 5 y
1 6 n
1 7 y
1 8 n
score_df
========
rid score Flag
1 5 n
1 6 y
1 6 n
1 6 n
当Flag='y'首先出现时,我需要将分数复制到其余行。在本例中,当分数为5时,第一行上出现flag=y。我会将分数5复制到剩余的行中。输出将如下所示
score_df
========
rid score Flag
1 5 y
1 5 n
1 5 y
1 5 n
Example2:
score_df
========
rid score Flag
1 5 n
1 6 y
1 7 n
1 8 y
在这种情况下,标志值仅在分数为6的第二行上为y。输出将如下所示
Example1:
score_df
========
rid score Flag
1 5 y
1 6 n
1 7 y
1 8 n
score_df
========
rid score Flag
1 5 n
1 6 y
1 6 n
1 6 n
因此,我想根据第一次出现的标志值填充行。如何在不循环的情况下在pandas中执行此操作?创建掩码,用于将第一个
y
值之后的所有值与“比较依据”、“累积求和依据”和“比较gor更大值”(如0
依据)匹配,并将第一个匹配值设置为仅过滤列值:
m = df['Flag'].eq('y').cumsum().gt(0)
df.loc[m, 'score'] = df.loc[m, 'score'].iat[0]
print (df)
rid score Flag
0 1 5 y
1 1 5 n
2 1 5 y
3 1 5 n
如果可能,解决方案不匹配(列中没有
y
值)有点不同,next
与iter
返回第一个值(如果存在),这里它只通过False
掩码设置0
值,因此不需要替换
此解决方案也适用于上述数据,因此更为通用
df.loc[m, 'score'] = next(iter(df.loc[m, 'score']), 0)
print (df)
rid score Flag
0 1 5 n
1 1 6 n
2 1 7 n
3 1 8 n
创建掩码,用于将第一个
y
值之后的所有值与“比较依据”、“累积求和依据”和“比较gor更大值”(如0
by)匹配,并将第一个匹配值设置为仅过滤列值:
m = df['Flag'].eq('y').cumsum().gt(0)
df.loc[m, 'score'] = df.loc[m, 'score'].iat[0]
print (df)
rid score Flag
0 1 5 y
1 1 5 n
2 1 5 y
3 1 5 n
如果可能,解决方案不匹配(列中没有
y
值)有点不同,next
与iter
返回第一个值(如果存在),这里它只通过False
掩码设置0
值,因此不需要替换
此解决方案也适用于上述数据,因此更为通用
df.loc[m, 'score'] = next(iter(df.loc[m, 'score']), 0)
print (df)
rid score Flag
0 1 5 n
1 1 6 n
2 1 7 n
3 1 8 n