Python 熊猫:如何防止自己遍历行?

Python 熊猫:如何防止自己遍历行?,python,pandas,Python,Pandas,我有以下数据帧 Charge_type Amount Quantity Credit 2.5 3 Credit 3.24 2 Debit 5.98 6 我需要以下输出,如果费用类型为“信用”,则乘以“金额”*-1和“数量”*-1得到以下结果: Charge_type Amount Quantity Credit -2.5 -3 Credit -3.24 -2 Debit 5.98

我有以下数据帧

Charge_type Amount Quantity
Credit        2.5    3 
Credit        3.24   2
Debit         5.98   6
我需要以下输出,如果费用类型为“信用”,则乘以“金额”*-1和“数量”*-1得到以下结果:

Charge_type Amount Quantity
Credit       -2.5    -3 
Credit       -3.24   -2
Debit         5.98    6

我不知道从哪里开始,我在网上看到的每一个地方都说不要在熊猫身上重复。对不起,我还是Python和Pandas的初学者。非常感谢您的帮助。

您可以为列
费用类型
创建掩蔽,并使用
.loc
和列名称访问掩蔽值为
True
的列,然后相应地分配新值:

mask=df['Charge\u type']='Credit'
df.loc[mask,'Amount']=-df['Amount']
df.loc[mask,'Quantity']=-df['Quantity']
输出

费用类型金额数量
0学分-2.50-3
1学分-3.24-2
2借方5.98 6
一个选项是使用:

第一部分创建一个布尔索引
df['Charge\u type'].eq('Credit')
(根据Charge\u type为'Credit'的位置选择行)

第二部分选择影响
['Amount','Quantity']
的列,在本例中为'Amount'和'Quantity'

最后,使用快捷操作符
*=
对值求反

df

  Charge_type  Amount  Quantity
0      Credit   -2.50        -3
1      Credit   -3.24        -2
2       Debit    5.98         6

我认为,将其他两个答案的方法结合起来(两个答案都已被提升)最具可读性:

mask = df['Charge_type'] == 'Credit'
df.loc[mask, ['Amount', 'Quantity']] *= -1
输出:

  Charge_type  Amount  Quantity
0      Credit   -2.50        -3
1      Credit   -3.24        -2
2       Debit    5.98         6

非常感谢!所有的评论都很有帮助!
  Charge_type  Amount  Quantity
0      Credit   -2.50        -3
1      Credit   -3.24        -2
2       Debit    5.98         6