python pandas多条件计数的问题
python pandas有个DataFrame,内容如图,我现在要统计人员签到的天数,因为有同一天签到多次的情况,我不能直接计算['姓名']的数量。各位大佬有什么实现的思路,给点灵感,谢谢。
统一把时间改成年月日的形式,然后去重,再进行计算就行了 用resample()把时间分组,再unique、count,或者如果时间是str就apply生成一个"yyyy-mm-dd"的时间,再unique、count resample方法对时间数据重采样,然后再想办法{:301_991:} rsnodame 发表于 2021-1-15 08:40
resample方法对时间数据重采样,然后再想办法
我的实现代码,欢迎大佬拍砖。
# ######第一部分,统计人员签到天数######
# 格式化日期
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]
else:
return 0
# 获得人员签到天数
df_personnel['签到天数'] = df_personnel.apply(lambda x: func_sign_in_Days(x), axis=1) cqwcns 发表于 2021-1-15 09:35
我的实现代码,欢迎大佬拍砖。
# ######第一部分,统计人员签到天数######
...
感觉太复杂了。“打卡时间”时间序列化之后,用resample('D')的方法可以直接按照天做重采样,类似一种针对时间优化过的分组操作,然后你直接对每个姓名对应有几天计数就行 首先把打卡记录分成 日期, 时间 两个部分(字符串分割,按 空格分割),只保留日期部分
把名字相同的打卡日期加入 一个列表, 最后 将列表转为集合(set(list)), len(转换后集合),ok!
页:
[1]