Python 用递增1的'ffill'(或任何其他方法)填写na值
我有下面的DF,我想填入NA值 我想用递增的值填充它,如下所示:Python 用递增1的'ffill'(或任何其他方法)填写na值,python,pandas,Python,Pandas,我有下面的DF,我想填入NA值 我想用递增的值填充它,如下所示: import pandas as pd data = [[1,1 ],[1, 1 ], [2, None], [3, None]] df = pd.DataFrame(data, columns = ['user', 'days_unseen']) #current behavior of ffill, leaves value the same df['value']=df['value'].ffill() print(d
import pandas as pd
data = [[1,1 ],[1, 1 ], [2, None], [3, None]]
df = pd.DataFrame(data, columns = ['user', 'days_unseen'])
#current behavior of ffill, leaves value the same
df['value']=df['value'].ffill()
print(df)
#desired fill - increments last value by 1
desired_data = [[1,1 ],[1, 1 ], [2, 2], [3, 3]]
desired_df = pd.DataFrame(desired_data, columns = ['user', 'days_unseen'])
print(desired_df)
您可以使用辅助序列为每个NaN值序列计算递增序列:
s = df.days_unseen.shift().loc[df.days_unseen.isna()]
s = pd.Series(data=1, index=s.index).cumsum() + s.fillna(
method='ffill')
然后,您可以使用它来填充原始数据帧中的空值:
df.days_unseen.fillna(s, inplace=True)
正如预期的那样:
user days_unseen
0 1 1.0
1 1 1.0
2 2 2.0
3 3 3.0
链,用于计数缺失值,并通过正向填充缺失值添加最后一个非缺失值:
df['value'] = df['days_unseen'].isna().cumsum() + df['days_unseen'].ffill()
print(df)
user days_unseen value
0 1 1.0 1.0
1 1 1.0 1.0
2 2 NaN 2.0
3 3 NaN 3.0