cqwcns 发表于 2020-12-14 12:24

python pandas根据条件apply的问题

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

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)

知心 发表于 2020-12-14 14:58

已区域+账号为键,装维为值,做一个dict,然后看键的长度,大于1即为是,否则为否

super谦 发表于 2020-12-14 15:35

说句老实话,没太读懂,我按照自己的理解写了几行代码```python
from collections import Counter
a = dict(Counter(df['账号']))
df['是否同装'] = df['账号'].apply(lambda x:"否" if a == 1 else "是")
```

rsnodame 发表于 2020-12-14 15:43

我来一个完全用pandas处理的办法。
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处理的办法。
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

各位好,因为我上面说的判断条件是列表中宽带与其他业务是否有同一账号,如果有,则为“是”,否则为“否”。
所以我改了一下,如下代码也可以实现,请各位大佬拍砖。

    # 新增[是否同装]列,根据账号是否重复,判断是否为同装业务
    sheetTemp = 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
各位好,因为我上面说的判断条件是列表中宽带与其他业务是否有同一账号,如果有,则为“是”,否则为“否” ...

{:17_1062:} 哦大概明白你意思了,如果同一个账号的业务是组网和电视的话,就不属于同装,对吧

cqwcns 发表于 2020-12-16 08:57

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

对头,就是这样{:301_997:}{:301_997:}{:301_997:}

rsnodame 发表于 2020-12-16 10:46

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

虽然想到几个别的实现办法,不过感觉和你的办法也没啥特别差异{:301_1009:}

cqwcns 发表于 2020-12-16 11:06

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

谢谢大佬{:301_993:}
页: [1]
查看完整版本: python pandas根据条件apply的问题