记录研究生封校生活的学习day17(第一篇)

66 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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))

输出的结果如下:

image.png

多索引相关技术与操作

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[('周七', '化妆品')])

输出的结果如下:

image.png