Python 用递增1的'ffill'(或任何其他方法)填写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

我有下面的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(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