[英]Fill nan with values from another df based on a condition
我有一個看起來像這樣的df
df1:
Quantity Date Open
0 NaN 2006-01-16 NaN
1 -20.0 2006-01-17 NaN
2 -20.0 2006-01-18 NaN
3 NaN 2006-01-19 NaN
4 20.0 2006-01-20 NaN
. . . .
. . . .
. . . .
和另一個看起來像這樣的 dataframe
df2
Date Open Quantity
0 2006-01-16 4567.00 -20.0
1 2006-01-19 4506.00 20.0
2 2006-01-25 4495.05 -20.0
3 2006-01-27 4609.80 20.0
4 2006-02-01 4574.05 -20.0
我想要做的是合並 ['Quantity','Open'] 列上的 df1 和 df2,因為它只合並 df1.Quantity 為 NaN 的行。 因此,df1 應該是這樣的
df1:
Quantity Date Open
0 -20.0 2006-01-16 4567.00
1 -20.0 2006-01-17 NaN
2 -20.0 2006-01-18 NaN
3 20.0 2006-01-19 4506.00
4 20.0 2006-01-20 NaN
我嘗試的是這段代碼df1.Open = df1.loc[df1['Quantity'].isna(), 'Open'].fillna(df2.EntryPrice)
。 我嘗試了這個,因為我確定 df2 中的日期包含在 df1 中的日期中並且在 df1.Quantity 中有 NaN 值。但是當我運行它時,這就是結果
Quantity Date Open
0 -20 2006-01-16 4567.0
1 -20.0 2006-01-17 NaN
2 -20.0 2006-01-18 NaN
3 20 2006-01-19 4609.8
4 20.0 2006-01-20 NaN
... ... ... ...
3317 -20.0 2017-05-23 NaN
3318 NaN 2017-05-23 NaN
3319 20.0 2017-05-24 NaN
3320 20.0 2017-05-25 NaN
3321 20.0 2017-05-26 NaN
如您所見,在第 3318 行,Quantity 和 Open 列中的 NaN 值仍未填充。 有人能幫我嗎
在兩個DataFrame
中創建DatetimeIndex
,然后在Open
中替換缺失值,僅用於過濾的行,然后Quantity
所有缺失的行:
df1 = df1.set_index('Date')
df2 = df2.set_index('Date')
mask = df1['Quantity'].isna()
df1.Open = df1.loc[mask, 'Open'].fillna(df2.Open)
df1.Quantity = df1['Quantity'].fillna(df2.Quantity)
df1 = df1.reset_index()
print (df1)
Date Quantity Open
0 2006-01-16 -20.0 4567.0
1 2006-01-17 -20.0 NaN
2 2006-01-18 -20.0 NaN
3 2006-01-19 20.0 4506.0
4 2006-01-20 20.0 NaN
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.