簡體   English   中英

回填列值使用實際值除以 Pandas 中前面的 NA 值的數量

[英]Backfill column values using real value divided by number of preceding NA values in Pandas

test_df = pd.DataFrame({'a':[np.nan,np.nan,np.nan,4,np.nan,np.nan,6]})
test_df
    a
0   NaN
1   NaN
2   NaN
3   4.0
4   NaN
5   NaN
6   6.0

我試圖用實際值除以 na 值的數量 + 本身來回填。 以下是我想要得到的

    a
0   1.0
1   1.0
2   1.0
3   1.0
4   2.0
5   2.0
6   2.0

嘗試:

# identify the blocks by cumsum on the reversed non-nan series
groups = test_df['a'].notna()[::-1].cumsum()

# groupby and transform 
test_df['a'] = test_df['a'].fillna(0).groupby(groups).transform('mean')

Output:

     a
0  1.0
1  1.0
2  1.0
3  1.0
4  2.0
5  2.0
6  2.0

IIUC 用途:

# get reverse group
group = test_df.loc[::-1,'a'].notna().cumsum()

# get size and divide
test_df['a'] = (test_df['a']
                .bfill()
                .div(test_df.groupby(group)['a'].transform('size'))
               )

或使用rdiv

test_df['a'] = (test_df
                .groupby(group)['a']
                .transform('size')
                .rdiv(test_df['a'].bfill())
                 )

Output(為清楚起見作為新列):

     a   a2
0  NaN  1.0
1  NaN  1.0
2  NaN  1.0
3  4.0  1.0
4  NaN  2.0
5  NaN  2.0
6  6.0  2.0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM