吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1212|回复: 9
收起左侧

[求助] python pandas根据条件apply的问题

[复制链接]
cqwcns 发表于 2020-12-14 12:24
DataFrame中有3列,分别是区域、账号和业务类型,我希望增加一列“是否同装”,根据前面的账号和业务类型判断“是/否”。
判断条件:列表中宽带与其他业务是否有同一账号,如果有,则为“是”,否则为“否”。如图效果。
代码要怎么写?请指教,谢谢。

[Python] 纯文本查看 复制代码
import pandas as pd

df = pd.DataFrame({"区域": ["茂南", "茂南", "茂南", "茂南", "信宜", "茂南", "茂南", "高州", "高州"],
                   "账号": ["123456", "123455", "12315", "10326", "12583", "123456", "123456", "12305", "12369"],
                   "业务类型": ["宽带", "宽带", "宽带", "组网", "电视", "组网", "电视", "电视", "宽带"]})

print(df)
df['是否同装'] = df.apply(lambda x: '这里判断是否同装')
print(df)


微信图片_20201214122345.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

知心 发表于 2020-12-14 14:58
已区域+账号为键,装维为值,做一个dict,然后看键的长度,大于1即为是,否则为否
super谦 发表于 2020-12-14 15:35
说句老实话,没太读懂,我按照自己的理解写了几行代码
from collections import Counter
a = dict(Counter(df['账号']))
df['是否同装'] = df['账号'].apply(lambda x:"否" if a[x] == 1 else "是")

1607931316(1).png
rsnodame 发表于 2020-12-14 15:43
我来一个完全用pandas处理的办法。
[Python] 纯文本查看 复制代码
temp = df['账号'].value_counts().apply(lambda x:'是' if x >1 else '否')
temp.name = '是否同装'
new_df = pd.merge(df,temp,left_on='账号',right_index=True)
rsnodame 发表于 2020-12-14 16:02
rsnodame 发表于 2020-12-14 15:43
我来一个完全用pandas处理的办法。
[mw_shl_code=python,true]temp = df['账号'].value_counts().apply(la ...

对于temp的赋值,还有一个写法

temp = df['账号'].value_counts().mask(df['账号'].value_counts() > 1, '是').replace(1,'否')

如果数据多的话大概比apply要快
 楼主| cqwcns 发表于 2020-12-15 10:48
各位好,因为我上面说的判断条件是列表中宽带其他业务是否有同一账号,如果有,则为“是”,否则为“否”。
所以我改了一下,如下代码也可以实现,请各位大佬拍砖。

[Python] 纯文本查看 复制代码
    # 新增[是否同装]列,根据账号是否重复,判断是否为同装业务
    sheetTemp = sheetClosedLoop[sheetClosedLoop.产品名称分类 == '宽带']
    listTemp = sheetTemp['宽带帐号'].tolist()
    sheetClosedLoop['是否与宽带同装'] = sheetClosedLoop.apply(lambda x: '是' if x.宽带帐号 in listTemp and x.产品名称分类 != '宽带' else '否',
                                                   axis=1)
rsnodame 发表于 2020-12-15 11:33
cqwcns 发表于 2020-12-15 10:48
各位好,因为我上面说的判断条件是列表中宽带与其他业务是否有同一账号,如果有,则为“是”,否则为“否” ...

哦大概明白你意思了,如果同一个账号的业务是组网和电视的话,就不属于同装,对吧
 楼主| cqwcns 发表于 2020-12-16 08:57
rsnodame 发表于 2020-12-15 11:33
哦大概明白你意思了,如果同一个账号的业务是组网和电视的话,就不属于同装,对吧

对头,就是这样
rsnodame 发表于 2020-12-16 10:46
cqwcns 发表于 2020-12-16 08:57
对头,就是这样

虽然想到几个别的实现办法,不过感觉和你的办法也没啥特别差异
 楼主| cqwcns 发表于 2020-12-16 11:06
rsnodame 发表于 2020-12-16 10:46
虽然想到几个别的实现办法,不过感觉和你的办法也没啥特别差异

谢谢大佬
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 09:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表