吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1283|回复: 6
收起左侧

[求助] python pandas多条件计数的问题

[复制链接]
cqwcns 发表于 2021-1-14 15:36
python pandas有个DataFrame,内容如图,我现在要统计人员签到的天数,因为有同一天签到多次的情况,我不能直接计算['姓名']的数量。
各位大佬有什么实现的思路,给点灵感,谢谢。


微信图片_20210114131113.png

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

沉默的工作者 发表于 2021-1-14 15:49
统一把时间改成年月日的形式,然后去重,再进行计算就行了
sz090955 发表于 2021-1-14 16:02
用resample()把时间分组,再unique、count,或者如果时间是str就apply生成一个"yyyy-mm-dd"的时间,再unique、count
rsnodame 发表于 2021-1-15 08:40
 楼主| cqwcns 发表于 2021-1-15 09:35
rsnodame 发表于 2021-1-15 08:40
resample方法对时间数据重采样,然后再想办法

我的实现代码,欢迎大佬拍砖。

[Python] 纯文本查看 复制代码
# ######第一部分,统计人员签到天数######
# 格式化日期
df_sign_in['打卡时间'] = pd.to_datetime(df_sign_in['打卡时间'])
# 新增[签到日期]列
df_sign_in['签到日期'] = df_sign_in.apply(lambda x: x['打卡时间'].strftime("%Y-%m-%d"), axis=1)
# 获取关键字段,参加一个新DataFrame
df_sign_in_drop_duplicates = df_sign_in.loc[:, ['姓名', '签到日期']]
# 去重
df_sign_in_drop_duplicates = df_sign_in_drop_duplicates.drop_duplicates()
# 创建人员签到天数字典
dict_sign_in_days = dict(Counter(df_sign_in_drop_duplicates['姓名']))
# 字典结构是这样的{'蔡海明': 10, '蔡向兴': 1, '曹福茂': 11, '曹福云': 10, '曹天贵': 11......
print(dict_sign_in_days)

# ######第二部分,应用数据######

# 获得签到天数
def func_sign_in_Days(x):
    if x['姓名'] in dict_sign_in_days:
        return dict_sign_in_days[x['姓名']]
    else:
        return 0

# 获得人员签到天数
df_personnel['签到天数'] = df_personnel.apply(lambda x: func_sign_in_Days(x), axis=1)
rsnodame 发表于 2021-1-15 11:20
cqwcns 发表于 2021-1-15 09:35
我的实现代码,欢迎大佬拍砖。

[mw_shl_code=python,true]# ######第一部分,统计人员签到天数######
...

感觉太复杂了。“打卡时间”时间序列化之后,用resample('D')的方法可以直接按照天做重采样,类似一种针对时间优化过的分组操作,然后你直接对每个姓名对应有几天计数就行

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
cqwcns + 1 + 1 热心回复!

查看全部评分

Cool_Breeze 发表于 2021-1-15 11:34
首先把打卡记录分成 日期, 时间 两个部分(字符串分割,按 空格分割),只保留日期部分
把名字相同的打卡日期加入 一个列表, 最后 将列表转为集合(set(list)), len(转换后集合),ok!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-26 08:39

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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