我試圖轉換列中列'side'
的對應值等於'B'的行的負值。我不想丟失任何未轉換的行。我下面試過,但得到提高KeyError('%s not in index' % objarr[mask])
根據Pandas Dataframe中另一列的內容在一列上運行操作
df[-df['nominal']].where(df['side']=='B')
我試圖轉換列中列'side'
的對應值等於'B'的行的負值。我不想丟失任何未轉換的行。我下面試過,但得到提高KeyError('%s not in index' % objarr[mask])
根據Pandas Dataframe中另一列的內容在一列上運行操作
df[-df['nominal']].where(df['side']=='B')
在布爾指數只要使用兩個條件與&
。
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
這對你會經常遇到大熊貓篩選數據的一個非常標準的方式。請參閱Pandas文檔中的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