持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第17天,点击查看活动详情
总计:今天是十月更文计划第十七天,第三十二篇
使用重采样技术按时间段查看员工业绩
如果要使用重采样,需要index为时间日期形才可以
resample(rule, how=None, axis=0, fill_method=None, closed=None, label=None, convention='start', kind=None, loffset=None, limit=None, base=0, on=None, level=None)
参数rule用来指定重采样的时间间隔,例如'7D'表示每7天采样一次;
参数how用来指定如何处理两个采样时间之间的数据,不过该参数很快会被新版本丢弃不用了;
参数label = 'left'表示使用采样周期的起始时间作为结果DataFrame的index,label='right'表示使用采样周期的结束时间作为结果DataFrame的index;
参数on用来指定根据哪一列进行重采样,要求该列数据为日期时间类型。
### 使用重采样技术按时间段查看员工业绩
import numpy as np
import pandas as pd
# 设置列对齐
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
# 读取全部数据,使用默认索引
df = pd.read_excel(r'超市营业额2.xlsx')
df.日期 = pd.to_datetime(df.日期) #吧“日期”列,修改为日期时间型
print('每7天营业总额'.ljust(20,'='))
print(df.resample('7D', on='日期').sum()['交易额']) #默认label是left默认值,即用周期内的第一个日期作为索引
print('每7天营业总额'.ljust(20,'='))
print(df.resample('7D', on='日期',label='right').sum()['交易额']) #用周期内的最后一个日期做索引
print('每7天营业额平均值'.ljust(20,'='))
func = lambda num:round(num,2)
print(df.resample('7D', on='日期',label='right').mean().apply(func)['交易额']) #应用一个函数func
print('每7天营业额平均值'.ljust(20,'='))
# 注意,这里要用np.sum(),不能用内置函数sum()
# 因为内置函数sum()不能忽略缺失值
func = lambda item:round(np.sum(item)/len(item),2)
print(df.resample('7D', on='日期',label='right')['交易额'].apply(func))
输出的结果如下:
多索引相关技术与操作
DataFrame结构支持多个索引,既可以在读取数据时使用index_col指定多列,也可以通过groupby()方法分组时指定多个索引。
对于含有多个索引的DataFrame结构,在使用sort_index()方法按索引排序、使用groupby()方法进行分组时,都可以使用参数level指定按哪一级索引进行排序或分组。
## 多索引相关技术与操作
import pandas as pd
# 设置列对齐
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
# 读取全部数据,使用默认索引
df = pd.read_excel(r'超市营业额2.xlsx')
# 原地删除工号一列的数据
df.drop('工号', axis=1, inplace=True)
df = df.groupby(by=['姓名', '柜台']).sum() #利用“姓名”“柜台”进行分区,其他数据进行求和
print('按姓名和柜台进行分组汇总'.ljust(20,'='))
print(df[:10]) #切片输出前10行
print('查看周七的汇总数据'.ljust(20,'=')) #查看某一个人的数据
print(df.loc['周七',:])
print('查看周七在化妆品柜台的交易数据'.ljust(20,'='))
print(df.loc[('周七', '化妆品')])
输出的结果如下: