簡體   English   中英

如何使用其他列中的值填充 Pandas 中一列的 nan

[英]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 ,並獲取該行的第一個可用值並使用該值替換col4nan ,但是如果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

使用bfillfillna

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.

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