![](/img/trans.png)
[英]Pandas fill NaN base on last available value and the next available value
[英]Pandas fill nan values with a split of the first available value
我正在嘗試將所有以下nan值中的第一個先前可用值的分割替換為DataFrame中的nan值。
在下面的示例中:
import pandas as pd
df = [100, None, None, 40, None, 120]
df = pd.DataFrame(df)
我想得到:
[33.33, 33.33, 33.33, 20, 20, 120]
如果我能找到一種方法來計算列中每個值后面的nan值的數量,那么我可以運行一些計算來實現拆分。
使用:
import pandas as pd
df = [100, None, None, 40, None, 120]
df = pd.DataFrame(df, columns=['a'])
s = df['a'].ffill() / df.groupby(df['a'].notna().cumsum())['a'].transform('size')
print (s)
0 33.333333
1 33.333333
2 33.333333
3 20.000000
4 20.000000
5 120.000000
Name: a, dtype: float64
細節 :
您可以通過ffill
替換以前的非NaN
值的缺失值:
print (df['a'].ffill())
0 100.0
1 100.0
2 100.0
3 40.0
4 40.0
5 120.0
Name: a, dtype: float64
然后,通過比較Series.notna
和創建組Series.cumsum
:
print (df['a'].notna().cumsum())
0 1
1 1
2 1
3 2
4 2
5 3
Name: a, dtype: int32
並使用GroupBy.transform
獲取每個具有相同大小的組的計數:
print (df.groupby(df['a'].notna().cumsum())['a'].transform('size'))
0 3
1 3
2 3
3 2
4 2
5 1
Name: a, dtype: int64
也許使用ffill
,得到第一列,然后將它除以它( ffill
ed ffill
) groupby
ed並使用transform('count')
來獲取計數並保持數據幀的相同長度:
print(df.ffill()[0] / df.ffill().groupby(0)[0].transform('count'))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.