oba*_*abs 4 python dataframe pandas
我正在尝试转换列'nominal'中对应的值'side'等于'B'的列中的行的负值。我不想丢失任何未转换的行。我在下面尝试过这个但是得到加薪KeyError('%s not in index' % objarr[mask])
df[-df['nominal']].where(df['side']=='B')
Run Code Online (Sandbox Code Playgroud)
只需在带有的布尔索引中使用这两个条件&。
df[(df.side == 'B') & (df.nominal < 0)]
Run Code Online (Sandbox Code Playgroud)
或者如果您打算进行修改,
df.loc[(df.side == 'B') & (df.nominal < 0), 'nominal']
Run Code Online (Sandbox Code Playgroud)
例
>>> 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
Run Code Online (Sandbox Code Playgroud)
这是一种很常见的用于过滤熊猫中数据的标准方法。请参阅Pandas文档中的布尔索引。
更新资料
对于您更新的问题描述,我们可以仅使用增强的赋值运算符*=将期望值乘以-1。
df.loc[(df.side == 'B'), 'nominal'] *= -1
Run Code Online (Sandbox Code Playgroud)
例
>>> 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
Run Code Online (Sandbox Code Playgroud)
小智 5
你应该试试这个:
df.loc[ ( df.side == 'B' ), 'nominal' ] *= -1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
696 次 |
| 最近记录: |