【Python】【Pandas】将符合条件行的某列数值改为负数

发布时间 2023-06-11 03:06:30作者: 萌狼蓝天

萌狼蓝天情景还原:

支付宝/微信导出的账单,不管支出还是收入都是正数。
我想把支出的金额改成负数,其他不变就这样。

解决办法

这里用到的是pandas.apply
e……下面的写法虽然比较麻烦,但是 这是比较好理解的写法,你理解之后可以把他写简单点。

data=data.apply(debuff,axis=1)

  • data是你读入的数据,比如data=pd.read_excel(FilePath)
  • debuff是自定函数名,你自己随便取,后面我们要写这个函数的。
  • axis=1 表示一行一行的取

然后就是写debuff这个函数

def debuff(c): # 这个c自己想写啥名就啥名,代表一行数据
# c["收/支"] 表示取出这一行"收/支"这一列的值
# .strip是取出空白字符
	 if c["收/支"].strip() == "支出":
	 	# 如果是支出,就改为负数
        c['金额'] = -c['金额']
        # 改好后记得将数据return回去
        return c
    else:
	# 如果不是支出,那直接return回去即可
        return c

完毕!

在此顺便记录几个常用代码写法:
1.不重复取出一列的值data[列名].unique()或者data[列名].value_counts(sort=False)

2.对取出的列值进行格式处理

# 这个示例是去掉空白字符
odata_jiaoyifenlei = odata["交易分类"].unique()
odata_jiaoyifenlei = [i.replace(" ","") for i in odata_jiaoyifenlei]

3.根据某列不重复值合计金额
`data.groupby(["交易类型"],sort=False).sum("金额")["金额"]