Python 如果某列中有NAN,如何打印NAN而不是0
我试图在每个文件中检查我的产品的条件为真的次数,但只需要检查满足条件的时间以及填充两列的时间,因此我使用此代码Python 如果某列中有NAN,如何打印NAN而不是0,python,python-3.x,pandas,Python,Python 3.x,Pandas,我试图在每个文件中检查我的产品的条件为真的次数,但只需要检查满足条件的时间以及填充两列的时间,因此我使用此代码 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) 这会检查条件,如果两个列都已填充,并且对我来说效果良好,
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\u Count”中使用cnt
进行映射,这对我来说不好,因为我以后必须计算百分比
所以,我想检查A001
和A002
,如果其中任何一个有NAN,它应该在cnt列中打印NAN,而不是0。谢谢
编辑:
这是我的数据集(仅跳过了所有其他行和列的相关列)
所以根据这个,我希望cnt柱是
cnt
NAN
2
NAN
NAN
NAN
0
2
0
但现在它正在打印0而不是NAN
0
2
0
0
0
0
2
0
为什么不将0替换为NAN呢
df['Data_Count'].替换(0,np.nan)
但你也可以这样做:
cnt=big\u frame.groupby('Symbol')。应用(lambda g:True if((g.A001>g.A002)和g.A001.notnull()&g.A002.notnull()).sum()否则为np.nan)
df['Data_Count']=df.Contract.map(cnt)
您可以执行以下操作(为清晰起见,分两步进行):
结果是:
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
请提供样本数据和预期输出,以提高您获得回复的机会。问题编辑否,在某些情况下A001
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