如果我有像这样的熊猫数据:
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中引入这个新条件列的最佳方法是什么?
答案 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
)。