【问题标题】:different handling of nan values of a df对 df 的 nan 值的不同处理
【发布时间】:2023-03-27 01:45:01
【问题描述】:

我有一个这样的 df:

      A    B 
 0    1    5
 1    1    7
 2  NaN  NaN
 3    1    8
 4  NaN  NaN
 5  NaN  NaN
 6    2    6
 7    2    2
 8  NaN  NaN
 9  NaN  NaN
10    2    3

现在我想在事件中填充与外部不同的 nan 值。一个事件由 A 列标识并具有相同的值(在我的示例中,有事件 1 和 2)。 A 列应仅包含事件中的事件编号。对于 B 列,应传输事件中的最后一个条目。 在事件之间,NaN 值应设置为“0”。

我尝试了ffill()fillna(),但无法与我的条件匹配。

预期结果:

      A    B 
 0    1    5
 1    1    7
 2    1    7
 3    1    8
 4    0    0
 5    0    0
 6    2    6
 7    2    2
 8    2    2
 9    2    2
10    2    3

感谢您的帮助:)

【问题讨论】:

    标签: python pandas dataframe nan fillna


    【解决方案1】:

    您可以将GroupBy.ffillSeries.mask 创建的辅助组一起使用,并通过回填值进行比较以防止组之间省略值,最后将缺失值替换为0 和整数:

    s = df.A.ffill()
    g = df.A.mask(s.eq(df.A.bfill()), s)
    df = df.groupby(g).ffill().fillna(0).astype(int)
    print (df)
        A  B
    0   1  5
    1   1  7
    2   1  7
    3   1  8
    4   0  0
    5   0  0
    6   2  6
    7   2  2
    8   2  2
    9   2  2
    10  2  3
    

    【讨论】:

    • 我也在 df 上尝试过,其中 A 列包含 datetime 类型的数据,另外 df 包含超过 2 列 - 尽管经过调整,但这里的架构不起作用。你能告诉我为什么吗?
    • @Vini - 难题,似乎数据相关问题,是否可以创建有问题的数据样本并转换为字典?像 df.to_dict(orient='list')` 用于检查数据类型,如果 NaN 不是字符串和类似的。
    猜你喜欢
    • 2021-02-20
    • 1970-01-01
    • 2022-08-14
    • 2020-02-28
    • 2015-12-08
    • 2019-11-24
    • 2022-07-20
    • 2019-12-19
    • 2019-08-12
    相关资源
    最近更新 更多