簡體   English   中英

當其他列不是nan或替換為其他列時,如何替換列中的值?

[英]How to replace values in column when other column is not nan or replace with other?

我是 Pandas 的新手,我正在尋找可以用其他列替換一列值的解決方案。 例如:

如果 colE 中的值為 Nan,則將 col A 的值替換為 Col E 中的值,如果不是 nan,則替換為 ColD 的值,否則替換為 ColC 的值。 有人可以幫忙嗎?

您可以為此使用.fillna ,這基本上意味着“如果存在則使用原始值,否則使用填充值”。

因此,您的示例應如下所示:

df_merged = df.assign(A=df['A'].fillna(df['E']).fillna(df['D']).fillna(df['C'])

你所描述的看起來很像bfill

df = pd.DataFrame({'A': [1, None, None, None, None],
                   'B': [2, 3, None, None, None],
                   'C': [4, 5, 6, 7, None],
                   'D': [8, 9, 10, None, None],
                   'E': [11, 12, None, None, None]
                  })
#      A    B    C     D     E
# 0  2.0  2.0  4.0   8.0  11.0
# 1  3.0  3.0  5.0   9.0  12.0
# 2  6.0  NaN  6.0  10.0   NaN
# 3  7.0  NaN  7.0   NaN   NaN
# 4  NaN  NaN  NaN   NaN   NaN


order = ['A', 'E', 'D', 'C']
df['A'] = df[order].bfill(axis=1)['A']

#       A    B    C     D     E
# 0   1.0  2.0  4.0   8.0  11.0
# 1  12.0  3.0  5.0   9.0  12.0
# 2  10.0  NaN  6.0  10.0   NaN
# 3   7.0  NaN  7.0   NaN   NaN
# 4   NaN  NaN  NaN   NaN   NaN

或者如果您真的想替換 A 的所有值(甚至是非 NaN):

order = ['E', 'D', 'C']
df['A'] = df[order].bfill(axis=1)['E']

#       A    B    C     D     E
# 0  11.0  2.0  4.0   8.0  11.0
# 1  12.0  3.0  5.0   9.0  12.0
# 2  10.0  NaN  6.0  10.0   NaN
# 3   7.0  NaN  7.0   NaN   NaN
# 4   NaN  NaN  NaN   NaN   NaN

暫無
暫無

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

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