2017-03-03 4 views
3

'side'の対応する値が 'B'の列'nominal'の行の負の値を変換しようとしています。私は変換されていない行を失いたくはありません。私は、下記の本を試みたが、ちょうど&とブール指標の両方の条件を使用しKeyError('%s not in index' % objarr[mask])Pandas Dataframeの別の列の内容に基づいて1つの列で操作を実行

df[-df['nominal']].where(df['side']=='B') 
+0

を?それなしであなたの例を歩いていくのは難しいことです。また、 "負の値を変換しようとしている"と言いましたが、何を変換しようとしていますか?それらを「B」にしようとしていますか? – MattR

答えて

1

あなたはこの試してみてください:あなたは、サンプルのデータフレームを投稿できる

df.loc[ (df.side == 'B'), 'nominal' ] *= -1 
+0

それは私はすでに下に提供していた答えと同じであることを与えられた答えとしてこれを追加するように促さ何? – miradulo

2

を上げるになってきました。

df[(df.side == 'B') & (df.nominal < 0)] 

か、変更する予定がある場合は、

df.loc[(df.side == 'B') & (df.nominal < 0), 'nominal'] 

>>> df = pd.DataFrame(dict(side=['A']*3+['B']*3, nominal = [1, -2, -2, 2, 6, -5])) 
>>> df 
    nominal side 
0  1 A 
1  -2 A 
2  -2 A 
3  2 B 
4  6 B 
5  -5 B 

>>> df.loc[(df.side == 'B') & (df.nominal < 0), 'nominal'] = 1000 

>>> df 
    nominal side 
0  1 A 
1  -2 A 
2  -2 A 
3  2 B 
4  6 B 
5  1000 B 

これはしばしば出くわすよパンダにおけるフィルタリングデータのための非常に標準的な方法です。パンダのドキュメントのBoolean Indexingを参照してください。


更新

更新し、問題の説明については、私達はちょうど-1で私たちの目標値を乗算する累算代入演算子*=を使用することができます。

df.loc[(df.side == 'B'), 'nominal'] *= -1 

>>> df = pd.DataFrame(dict(nominal = [1, 2, 5, 3, 5, 3], side=['A']*3 + ['B']*3)) 

>>> df 
    nominal side 
0  1 A 
1  2 A 
2  5 A 
3  3 B 
4  5 B 
5  3 B 

>>> df.loc[(df.side == 'B'), 'nominal'] *= -1 

df 
    nominal side 
0  1 A 
1  2 A 
2  5 A 
3  -3 B 
4  -5 B 
5  -3 B 
+0

私の問題は少し難解です。列「名義」のすべての私の値は正の数です。対応する列の側が "B"の場合は負の値に変換したいだけです – obabs

+0

@obabs私は自分の答えを更新しました。それは、元の質問に、より明確にされていた場合、それは便利だっただろう:) – miradulo

関連する問題