Python 如何仅当数据帧的行包含少于一定数量的NAN时才将函数应用于该行?

Python 如何仅当数据帧的行包含少于一定数量的NAN时才将函数应用于该行?,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个我认为很简单的问题,但我遗漏了一些东西 我有一个值的数据框。我想平均这些行。。。但我只想在它匹配一定数量的条目时这样做——或者换句话说,缺少NaN值。所以下面的数据帧应该得到一个'average'列[1.5,1.5,np.nan],但是我得到了一个“序列的真值是不明确的”错误。我不知道那是什么意思 我以为会是这样的 df = pd.DataFrame([[1,np.nan,2], [1, 1.5, 2], [np.nan, np

我有一个我认为很简单的问题,但我遗漏了一些东西

我有一个值的数据框。我想平均这些行。。。但我只想在它匹配一定数量的条目时这样做——或者换句话说,缺少NaN值。所以下面的数据帧应该得到一个'average'列[1.5,1.5,np.nan],但是我得到了一个“序列的真值是不明确的”错误。我不知道那是什么意思

我以为会是这样的

df = pd.DataFrame([[1,np.nan,2], 
              [1, 1.5, 2], 
              [np.nan, np.nan, 1]])

df['mean'] = df[0:3].mean(axis=1) if df['nullsum'] < 2 else np.nan


ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
df=pd.DataFrame([[1,np.nan,2],
[1, 1.5, 2], 
[np.nan,np.nan,1]]
df['mean']=df[0:3]。如果df['nullsum']<2,则为平均值(轴=1),否则为np.nan
ValueError:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。

您可以先删除它,然后再删除
reindex
dropna
中的
thresh
表示需要多少notnull值

df.dropna(thresh=2).mean(1).reindex(df.index)
Out[264]: 
0    1.5
1    1.5
2    NaN
dtype: float64

您可以先删除它,然后
reindex
dropna
中的
thresh
表示需要多少notnull值

df.dropna(thresh=2).mean(1).reindex(df.index)
Out[264]: 
0    1.5
1    1.5
2    NaN
dtype: float64

由于df['nullsum']是一个系列,并且这种比较是不可能的,因此它会抛出一个错误。您可能希望比较每一行的nullsum值

df['mean']= df.apply(lambda x: np.mean(x[:3]) if x['nullsum'] < 2 else np.nan,axis=1)
df['mean']=df.apply(λx:np.mean(x[:3])如果x['nullsum']<2否则np.nan,轴=1)

这里x逐行获取,因此x['nullsum']给出该特定行的值。

由于df['nullsum']是一个系列,并且这种比较是不可能的,它会抛出一个错误。您可能希望比较每一行的nullsum值

df['mean']= df.apply(lambda x: np.mean(x[:3]) if x['nullsum'] < 2 else np.nan,axis=1)
df['mean']=df.apply(λx:np.mean(x[:3])如果x['nullsum']<2否则np.nan,轴=1)
这里x逐行获取,因此x['nullsum']给出该特定行的值