2016-09-04 5 views
1

を扱う条件列をパンダ:Pythonは私はこのようなパンダのデータがある場合は該当なし

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

を、私は、その値S1、S2、S3のドンの値ならばNoneになります新しい列「s」を追加したいですマッチしない。一致する場合(この比較では[​​なし]を無視したい)、値は共通の値でなければなりません。したがって、出力は

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 

この新しい条件付き列をパンダに導入するにはどうすればよいでしょうか?あなたが行うことができ、

答えて

1

と仮定すると、あなたの列が数値であり、なしのは、NaNの者として扱われます。すべての値が等しい場合

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を無視します。

最初の仮定が正しくない場合には、交換してください最初のなしの:NPはnumpyのある

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

import numpy as np)。

+0

元のデータには、(私が考慮したくない数値列を含む)多くの列が含まれており、特定の列でのみこれを行う必要があります。特定の列に対してのみstdを実行する簡単な方法はありますか?それは軸全体でそれを行うように見えます。 – Man

+0

'df.std(axis = 1)'の代わりに 'df [['s1'、 's2']] std(axis = 1)'のような列のサブセットを渡すことができます(平均'df_sub = df [['s1'、 's2']]。copy()'を使って、stdとmeanの計算に使います。 – ayhan

関連する問題