【问题标题】:How to print NAN instead of 0 if one of a column has NAN in it [closed]如果一列中有 NAN,如何打印 NAN 而不是 0 [关闭]
【发布时间】:2020-11-04 19:12:43
【问题描述】:

我正在尝试检查每个文件中我的产品的条件为真的次数,但只需要检查条件何时满足并且两个列都已填充,因此我正在使用此代码

cnt = big_frame.groupby('Symbol').apply(lambda g:((g.A001 > g.A002) & g.A001.notnull() & g.A002.notnull()).sum())
df['Data_Count'] = df.Contract.map(cnt)

检查条件,如果两个列都已填充并且它对我来说工作正常,除了当它在任何列中遇到 NAN 时,它会在 cnt 中打印 0,因此稍后在我映射时在“Data_Count”中打印cnt 这对我不利,因为我必须稍后计算百分比。

所以,我想要检查 A001A002,如果其中任何一个有 NAN,它应该在 cnt 列中打印 NAN 而不是 0。谢谢

编辑:

这是我的数据集(只是我跳过了所有其他行和列的相关列)

Symbol   A001   A002
O.U20   0.005   NAN
O.Z20   0.005  0.0025
O.H21   0.005   NAN
O.M21   0.005   NAN
O.U21   0.005   NAN
O.Z21   0.005   1
O.H22   0.005   0.003
O.M22   0.005   0.005  
O.U20   0.005   NAN
O.Z20   0.005  0.0025
O.H21   0.005   NAN
O.M21   0.005   NAN
O.U21   0.005   NAN
O.Z21   0.005   1
O.H22   0.005   0.003
O.M22   0.005   0.005  

所以根据这个我希望cnt列是

 cnt
 NAN
 2
 NAN
 NAN
 NAN
 0
 2
 0

但现在它打印的是 0 而不是 NAN

 0 
 2
 0
 0
 0
 0
 2
 0

【问题讨论】:

  • 请提供示例数据和预期输出,以提高您获得回复的机会。
  • 问题已编辑

标签: python python-3.x pandas


【解决方案1】:

您可以执行以下操作(为了清楚起见,分几个步骤):

df["cond"] = np.where(df.A001.isna() | df.A002.isna(), np.NaN, df.A001 > df.A002)

def foo(x):
    if x.isna().all():
        return np.NaN
    else: 
        return x.sum()

df.groupby('Symbol')["cond"].apply(foo)

结果是:

Symbol
O.H21    NaN
O.H22    2.0
O.M21    NaN
O.M22    0.0
O.U20    NaN
O.U21    NaN
O.Z20    2.0
O.Z21    0.0
Name: cond, dtype: float64

【讨论】:

    【解决方案2】:

    为什么不把 0 换成 Nans 呢:

    df['Data_Count'].replace(0, np.nan)
    

    但你也可以这样做:

    cnt = big_frame.groupby('Symbol').apply(lambda g: True if ((g.A001 > g.A002) & g.A001.notnull() & g.A002.notnull()).sum() else np.nan)
    df['Data_Count'] = df.Contract.map(cnt)
    

    【讨论】:

    • 不,会有 A001
    • @hyeri 在这种情况下,您将需要一个嵌套 if 在您的 lamdba 中,我会计算它并编辑我的答案
    • @hyeri 你可以使用的 lambda 是这样的:" lambda g: (g.A001 > g.A002).sum() if (g.A001.notnull() & g.A002 .notnull()) else np.Nan " 但我不知道熊猫是否会接受这样的东西,当然。
    猜你喜欢
    • 2021-12-18
    • 2022-01-26
    • 2022-12-19
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    • 1970-01-01
    • 2016-07-22
    相关资源
    最近更新 更多