【问题标题】:Fill Consecutive NANs in a column of a dataframe在数据框的列中填充连续的 NAN
【发布时间】:2018-12-20 10:18:50
【问题描述】:

我有一个包含 C 列的数据框,我想用相同的数字填充连续的空白,因为稍后我需要对该行进行分组。

例如

A B C
 1 2 Nan
 1 2 Nan
 1 2 3
 1 2 Nan
 1 2 Nan

我想要的输出是这样的

A B C
1 2 1
1 2 1
1 2 3
1 2 2
1 2 2

我尝试使用 shift() 进行比较,但没有得到想要的输出。

【问题讨论】:

    标签: python pandas dataframe null nan


    【解决方案1】:

    函数fillna是你的解决方案:

    dataframe['yourColumn'] = dataframe['yourColumn'] .fillna( 1 , inplace=True)
    

    此外,您可以使用任何值替换 nan 值。 例如,您可以设置均值:

    dataframe['yourColumn']= dataframe['yourColumn'].fillna(dataset['yourColumn'] .mean(), inplace=True)
    

    【讨论】:

    • 我希望连续的 NaN 具有相同的数字,因此第一个连续的 Nan 将有 1,第二个连续的 Nan 将有 2,依此类推...请仔细阅读问题
    【解决方案2】:

    您可以使用fillna by new Series created by cumsum by boolean mask:

    df['C'] = df['C'].fillna(df['C'].notnull().cumsum() + 1)
    
    print (df)
       A  B    C
    0  1  2  1.0
    1  1  2  1.0
    2  1  2  3.0
    3  1  2  2.0
    4  1  2  2.0
    

    详情

    print (df['C'].notnull().cumsum())
    0    0
    1    0
    2    1
    3    1
    4    1
    Name: C, dtype: int32
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-29
      • 1970-01-01
      • 2017-09-16
      • 1970-01-01
      • 2021-01-20
      • 1970-01-01
      • 2022-01-20
      • 2022-01-14
      相关资源
      最近更新 更多