Python pandas条件列处理None

时间:2016-09-04 11:39:27

标签: python pandas

如果我有像这样的熊猫数据:

s1    s2    s3
 1    None   1
 1    2      1
 2    2      2
 1    2     None

我想添加一个新专栏' s'如果s1,s2和s3的值不匹配,则其值为None。如果它们匹配(我想在此比较中忽略无),则该值应为公共值。所以输出将是

s1    s2    s3     s
 1    None   1     1        (Ignoring None in comparision here)
 1    2      1    None
 2    2      2     2
 1    2     None  None

在pandas中引入这个新条件列的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

假设您的列是数字且无“无”被视为NaN' s,您可以执行以下操作:

df['s'] = np.where(df.std(axis=1)==0, df.mean(axis=1), np.nan)

df
Out: 
   s1   s2   s3    s
0   1  NaN  1.0  1.0
1   1  2.0  1.0  NaN
2   2  2.0  2.0  2.0
3   1  2.0  NaN  NaN

这是基于以下事实:如果所有值都相等,则该行的标准偏差将为0,并且平均值将等于这些数字。均值和标准差计算都忽略NaN。

如果第一个假设不正确,请先替换无:

df = df.replace({'None': np.nan})

其中np是numpy(import numpy as np)。