列'side'
の対応する値が 'B'の列'nominal'
の行の負の値を変換しようとしています。私は変換されていない行を失いたくはありません。私は、下記の本を試みたが、ちょうど&
とブール指標の両方の条件を使用しKeyError('%s not in index' % objarr[mask])
Pandas Dataframeの別の列の内容に基づいて1つの列で操作を実行
df[-df['nominal']].where(df['side']=='B')
列'side'
の対応する値が 'B'の列'nominal'
の行の負の値を変換しようとしています。私は変換されていない行を失いたくはありません。私は、下記の本を試みたが、ちょうど&
とブール指標の両方の条件を使用しKeyError('%s not in index' % objarr[mask])
Pandas Dataframeの別の列の内容に基づいて1つの列で操作を実行
df[-df['nominal']].where(df['side']=='B')
あなたはこの試してみてください:あなたは、サンプルのデータフレームを投稿できる
df.loc[ (df.side == 'B'), 'nominal' ] *= -1
それは私はすでに下に提供していた答えと同じであることを与えられた答えとしてこれを追加するように促さ何? – miradulo
を上げるになってきました。
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
を?それなしであなたの例を歩いていくのは難しいことです。また、 "負の値を変換しようとしている"と言いましたが、何を変換しようとしていますか?それらを「B」にしようとしていますか? – MattR