我有以下数据框:
import pandas as pd
df = pd.DataFrame({
'col1':['A',pd.NA,pd.NA,pd.NA,pd.NA, 'B', pd.NA, pd.NA],
'col2':[9.5, 6,24,8, 30, 7, 6, 8],
})
print(df)
给予:
col1 col2
0 A 9.5
1 <NA> 6.0
2 <NA> 24.0
3 <NA> 8.0
4 <NA> 30.0
5 B 7.0
6 <NA> 6.0
7 <NA> 8.0
我想要实现的是前向填充 col1,但不是在 col2 中的值大于我从中前向填充的行的 col2 值的行中。像这样:
col1 col2
0 A 9.5
1 A 6.0
2 <NA> 24.0
3 A 8.0
4 <NA> 30.0
5 B 7.0
6 B 6.0
7 <NA> 8.0
这里,索引 1 和 3 是前向填充的,但索引 2 和 4 不是,因为 col2 值 (24, 30) 大于初始行的 col2 值 (9.5)
我可以通过迭代df来达到预期的结果,如下所示:
val2 = -1
for i, r in df.iterrows():
if not pd.isnull(r['col1']):
val1 = r['col1']
val2 = r['col2']
else:
if r['col2']<val2:
df.loc[i, 'col1'] = val1
print(df)
有没有办法在不使用 iterrows() 的情况下实现这一点?