【问题标题】:How to substitute NaN values of a column based on the values of another column?如何根据另一列的值替换列的 NaN 值?
【发布时间】:2015-12-31 10:41:29
【问题描述】:

我想根据列 Idx 的值替换列 Title 的 NaN 值。如果 Idx 等于 1,那么 NaN 必须被 0 代替,如果 Idx 等于 0,那么 NaN Title 必须等于 1。

Title   Idx
NaN     0
0       1
1       0
NaN     0
NaN     1

我试过了:

df.loc[df['Title'].isnull(), 'Title'] = 0

当然它总是放0。我怎样才能在这里添加条件?

【问题讨论】:

    标签: python python-2.7 pandas dataframe nan


    【解决方案1】:

    您可以将任何系列或列传递给fillna()。在这种情况下,您需要使用 Series 1 - df['Idx'] 填充缺失值以获得结果:

    >>> df
       Title  Idx
    0    NaN    0
    1      0    1
    2      1    0
    3    NaN    0
    4    NaN    1
    
    >>> df['Title'] = df['Title'].fillna(1 - df['Idx'])
    >>> df
       Title  Idx
    0      1    0
    1      0    1
    2      1    0
    3      1    0
    4      0    1
    

    【讨论】:

    • 如果条件包括超过 1 列,即标题和电影,这种方法是否有效?
    • 您的意思是要在超过 1 列中填写 NaN 值吗?如果是这样,fillna() 也可以在 DataFrames 上工作,所以它应该可以工作。话虽如此,根据您想要的确切结果,单独处理每一列可能会更简单。
    • 我的意思是,例如Idx == 1,如果 Title == 0 AND Films == 0
    • 这应该是可能的——你只需要构造那个系列并将它传递给fillna。您可能对np.where 感兴趣,以此作为一种手段。例如,np.where((df.Title == 0) & (df.Films == 0), 1, 0) 可以构造该系列。
    猜你喜欢
    • 2019-12-02
    • 2020-10-27
    • 1970-01-01
    • 2021-06-29
    • 2020-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多