对Dataframe根据两列结果修改其他两列的数据,然后对结果进行批处理写入mysql数据库

本文介绍如何使用Python对DataFrame进行条件操作,如根据'counts'和'cnt'判断修改'success_days'和'fail_days',并利用lambda表达式计算'finish_status'。最后,演示了如何将处理后的结果以元组形式批量插入到MySQL数据库,优化了并发性能以避免阻塞。


描述- 对df根据两列的值计算判断,根据结果修改其他两列值的数据,并将结果批量插入mysql 数据库

1-处理两列结果修改其他两列的值

左表1->右结果表2
在这里插入图片描述
代码如下,

#1  expand:将得到的结果拓为两列
res1[['success_days','fail_days']]=res1.apply(lambda x:(x['success_days']+1 if x['counts']==x['cnt'] else x['success_days'],
                      x['fail_days']+1 if x['counts']!=x['cnt'] else x['fail_days']),axis=1,result_type="expand")
#2
res1['finish_status']=res1.apply(lambda x:1 if x['success_days']+x['fail_days']==x['goal_days'] else 0,axis=1)
#结果
results=res1[['goal_id','success_days','fail_days','finish_status']]
results
2-批量更新插入数据库

其实本编主要阐述是将结果怎么批量插入数据库,防止阻塞

#需要的数据格式处理..
list_columns=",".join(results.columns)
>> list_columns
>>'goal_id,success_days,fail_days,finish_status'

res_values=list(results.apply(lambda x:tuple([i for i in x]),axis=1))
list_values=str(res_values)[1:-1]
>> list_values
>>'(5, 0, 1, 0), (33, 0, 1, 0), (34, 0, 1, 0), (35, 1, 0, 0), (37, 0, 1, 0), (42, 0, 1, 0), (44, 1, 0, 1), (46, 0, 1, 0), (47, 0, 1, 0), (48, 0, 1, 0)'

table_name="your_table_name"
#sql语句格式
res_sql=f""" insert into {table_name} ({list_columns}) values {list_values} on  duplicate key update success_days=values(success_days),fail_days=values(fail_days),finish_status=values(finish_status)"""

con = conn_sql()
cursor = con.cursor()  # 获取游标
cursor.execute(res_sql)
con.commit()
cursor.close()
con.close()
print('写入完成.................')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Elvis_hui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值