2017-12-18 27 views
1

フィルタリングして置き換えます。 NaNではなく、ゼロよりも小さいか高いカラムについては、1と他のものを設定したいと思います。ゼロに設定します。条件に基づいてデータフレームの値を0と1に置き換えます。

mask = ((ts[x] > 0) 
     | (ts[x] < 0)) 
ts[mask]=1 
ts[ts[x]==1] 

私はこれをしなかったし、取り組んでいるが、私はゼロに置き換え、この条件に出席しない値に対処する必要があります。 推奨事項はありますか?私は非常に混乱しており、を使用する方が良いでしょう。この場合、はどこですか?

ありがとうございます! applyの使用に関する

サンプルデータ

asset.relativeSetpoint.350 
0      -60.0 
1       0.0 
2       NaN 
3      100.0 
4       0.0 
5       NaN 
6      -120.0 
7      -245.0 
8       0.0 
9      123.0 
10       0.0 
11      -876.0 

期待される結果

asset.relativeSetpoint.350 
0       1 
1       0 
2       0 
3       1 
4       0 
5       0 
6       1 
7       1 
8       0 
9       1 
10       0 
11       1 
+1

'ts [mask]'、なぜこれを1に割り当てていますか?入力と期待される出力を提供できますか?あなたの目標は何ですか? –

+0

@coldspeed特定のパラメータが有効化された時間とそれがゼロでない時間に基づいてグラフを作成します。また、私の他の値はNaNか既にゼロです – Mayra

+0

これはうまくいくでしょうか? '' df [:] = mask.values [:、None] .repeat(df.shape [1]、axis = 1).astype(int) ' –

答えて

1

あなたは論理AND二つの条件に適用し、整数に生じたマスクを変換することによってこれを行うことができます。

df 

    asset.relativeSetpoint.350 
0      -60.0 
1       0.0 
2       NaN 
3      100.0 
4       0.0 
5       NaN 
6      -120.0 
7      -245.0 
8       0.0 
9      123.0 
10       0.0 
11      -876.0 
(df['asset.relativeSetpoint.350'].ne(0) 
& df['asset.relativeSetpoint.350'].notnull()).astype(int) 

0  1 
1  0 
2  0 
3  1 
4  0 
5  0 
6  1 
7  1 
8  0 
9  1 
10 0 
11 1 
Name: asset.relativeSetpoint.350, dtype: int64 

最初の条件df['asset.relativeSetpoint.350'].ne(0)が0に等しくないすべての要素(これは< 0、> 0、とのNaNを含むであろう)のブールマスクを取得します。

第2の条件df['asset.relativeSetpoint.350'].notnull()は、NaNではない要素の論理マスクを取得します。

2つのマスクは論理積をとり、整数に変換されます。

1

どのように?

df[COLUMN_NAME] = df[COLUMN_NAME].apply(lambda x: 1 if x != 0 else 0) 
+0

ありがとう!適用はうまくいくようです – Mayra

+0

@Mayraより良い方法がある場合、問題に対する最悪の解決策です。私が二度言ったように、いくつかのデータを提供してください。誰かがあなたに良い答えを与えます。 –

+0

あなたは正しいです!データ全体をコード記述の原因にする方法がわかりませんが、私はいくつかのコードを公開しようとしました。私はマスクが機能するところで一緒に働いていない理由を理解していません。 – Mayra

関連する問題