[英]Handling Nulls in Pandas – Use filtered values in one column to fill nan in two other columns
[英]how to use values in other columns to fill nan of one column in Pandas
我需要用其他列中的值填充nan
值,例如我有一個這樣的df
:
col1, col2, col3, col4
1 nan nan nan
2 3 nan nan
4 nan 5 nan
6 8 nan 9
我需要把上面的df
變成
col1, col2, col3, col4
1 nan nan 1
2 3 nan 2
4 nan 5 4
6 8 nan 9
我想遍歷col1
~ col3
,並獲取該行的第一個可用值並使用該值替換col4
的nan
,但是如果col4
的行已經有值,則忽略該行。
我被告知循環數據幀並不理想,我還有什么其他選擇?
嘗試:
df.assign(col4 = df.apply(lambda row: row[row.first_valid_index()], axis=1))
輸出:
col1,col2,col3,col4
0 1.0 NaN NaN 1.0
1 NaN 3.0 NaN 3.0
2 4.0 NaN 5.0 4.0
3 6.0 8.0 NaN 6.0
df.assign(col4 = df.apply(lambda row: row.first_valid_index(), axis=1))
這會給你:
col1,col2,col3,col4
0 1.0 NaN NaN col1,
1 NaN 3.0 NaN col2,
2 4.0 NaN 5.0 col1,
3 6.0 8.0 NaN col1,
通過使用這些信息,您可以分配值。
更好的使用:
df['col4'] = df.apply(
lambda row: row[row.first_valid_index()] if np.isnan(row['col4']) else row['col4'],
axis=1
)
這將為您提供所需的結果(因為我們必須填充 col4 的 NaN)
col1,col2,col3,col4
0 1.0 NaN NaN 1.0
1 NaN 3.0 NaN 3.0
2 4.0 NaN 5.0 4.0
3 6.0 8.0 NaN 9.0
使用bfill
和fillna
df['col4'] = df['col4'].fillna(df.bfill(1)['col1'])
Out[833]:
col1 col2 col3 col4
0 1 NaN NaN 1.0
1 2 3.0 NaN 2.0
2 4 NaN 5.0 4.0
3 6 8.0 NaN 9.0
您可以只使用fillna
並遍歷列的名稱:
for col_name in df.columns[:-1]:
df['col4'].fillna(df[col_name], inplace=True)
這會給你:
col1 col2 col3 col4
0 1 NaN NaN 1.0
1 2 3.0 NaN 2.0
2 4 NaN 5.0 4.0
3 6 8.0 NaN 9.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.