pandas 当另一列上的条件成立时从一列中减去常数值

dkqlctbz  于 2023-03-06  发布在  其他
关注(0)|答案(3)|浏览(162)

我有一个Pandas数据框,其中包含以下列:* foo * 和 * bar foo * 值是整数,* bar * 值是字符串。对于每一行,如果 * bar * 的值是某个特定的值,比如'ABC',那么我想将 * foo * 列(对于该行)的值设置为当前值减1。
例如,我想转换这个数据框:
| 富|棒|
| - ------|- ------|
| 九十八|ABC|
| 五十三|'DEF'|
| 二十二|ABC|
| 三十四|"生长激素"|
转换为:
| 富|棒|
| - ------|- ------|
| 九十七|ABC|
| 五十三|'DEF'|
| 二十一|ABC|
| 三十四|"生长激素"|
这是怎么做到的?

mhd8tkvw

mhd8tkvw1#

您可以通过 Dataframe 上的.loc执行此操作:

CONSTANT_VAL = 1
df.loc[df['bar'] == 'ABC', 'foo'] -= CONSTANT_VAL
vltsax25

vltsax252#

.locnp.where在这里都可以用作可能的解决方案。
np.where的工作方式类似于if-else语句,它检查是否满足条件,在本例中为df['bar'] == 'ABC',如果为真,则从df ['foo']中减去1,否则不执行任何操作。

df['foo'] = np.where(df['bar']=='ABC', df['foo']-1, df['foo'])
gg58donl

gg58donl3#

In [2]: df
Out[2]:
   foo  bar
0   98  ABC
1   53  DEF
2   22  ABC
3   34  FGH

In [3]: df.loc[df.bar=='ABC', 'foo'] = df[df.bar=='ABC']['foo']-1

In [4]: df
Out[4]:
   foo  bar
0   97  ABC
1   53  DEF
2   21  ABC
3   34  FGH

相关问题