pandas_重采样多索引标准差协方差
作者:互联网
# 重采样 多索引 标准差 协方差 import pandas as pd import numpy as np import copy # 设置列对齐 pd.set_option("display.unicode.ambiguous_as_wide",True) pd.set_option("display.unicode.east_asian_width",True) data = pd.read_excel(r'C:\Users\lenovo\Desktop\总结\Python\超市营业额.xlsx') # 将日期设置为 python 中的日期类型 data.日期 = pd.to_datetime(data.日期) ''' 工号 姓名 日期 时段 交易额 柜台 0 1001 张三 1970-01-01 00:00:00.020190301 9:00-14:00 2000 化妆品 1 1002 李四 1970-01-01 00:00:00.020190301 14:00-21:00 1800 化妆品 2 1003 王五 1970-01-01 00:00:00.020190301 9:00-14:00 800 食品 ''' # 每七天营业的总额 data.resample('7D',on = '日期').sum()['交易额'] ''' 日期 1970-01-01 17410 Freq: 7D, Name: 交易额, dtype: int64 ''' # 每七天营业总额 data.resample('7D',on = '日期',label = 'right').sum()['交易额'] ''' 日期 1970-01-08 17410 Freq: 7D, Name: 交易额, dtype: int64 ''' # 每七天营业额的平均值 func = lambda item:round(np.sum(item)/len(item),2) data.resample('7D',on = '日期',label = 'right').apply(func)['交易额'] ''' 日期 1970-01-08 1024.12 Freq: 7D, Name: 交易额, dtype: float64 ''' # 每七天营业额的平均值 func = lambda num:round(num,2) data.resample('7D',on = '日期',label = 'right').mean().apply(func)['交易额'] # 1024.12 # 删除工号这一列 data.drop('工号',axis = 1,inplace = True) data[:2] ''' 姓名 日期 时段 交易额 柜台 0 张三 1970-01-01 00:00:00.020190301 9:00-14:00 2000 化妆品 1 李四 1970-01-01 00:00:00.020190301 14:00-21:00 1800 化妆品 ''' # 按照姓名和柜台进行分组汇总 data = data.groupby(by = ['姓名','柜台']).sum()[:3] ''' 交易额 姓名 柜台 周七 日用品 1180 张三 化妆品 4600 蔬菜水果 600 ''' # 查看张三的汇总数据 data.loc['张三',:] ''' 交易额 柜台 化妆品 4600 蔬菜水果 600 ''' # 查看张三在蔬菜水果的交易数据 data.loc['张三','蔬菜水果'] ''' 交易额 600 Name: (张三, 蔬菜水果), dtype: int64 ''' # 多索引 # 重新读取,使用第二列和第六列作为索引,排在前面 data = pd.read_excel(r'C:\Users\lenovo\Desktop\总结\Python\超市营业额.xlsx',index_col = [1,5]) data[:5] ''' 工号 日期 时段 交易额 姓名 柜台 张三 化妆品 1001 20190301 9:00-14:00 2000 李四 化妆品 1002 20190301 14:00-21:00 1800 王五 食品 1003 20190301 9:00-14:00 800 赵六 食品 1004 20190301 14:00-21:00 1100 周七 日用品 1005 20190301 9:00-14:00 600 ''' # 丢弃工号列 data.drop('工号',axis = 1,inplace = True) data[:5] ''' 日期 时段 交易额 姓名 柜台 张三 化妆品 20190301 9:00-14:00 2000 李四 化妆品 20190301 14:00-21:00 1800 王五 食品 20190301 9:00-14:00 800 赵六 食品 20190301 14:00-21:00 1100 周七 日用品 20190301 9:00-14:00 600 ''' # 按照柜台进行排序 dff = data.sort_index(level = '柜台',axis = 0) dff[:5] ''' 工号 日期 时段 交易额 姓名 柜台 张三 化妆品 1001 20190301 9:00-14:00 2000 化妆品 1001 20190302 9:00-14:00 1300 化妆品 1001 20190303 9:00-14:00 1300 李四 化妆品 1002 20190301 14:00-21:00 1800 化妆品 1002 20190302 14:00-21:00 1500 ''' # 按照姓名进行排序 dff = data.sort_index(level = '姓名',axis = 0) dff[:5] ''' 工号 日期 时段 交易额 姓名 柜台 周七 日用品 1005 20190301 9:00-14:00 600 日用品 1005 20190302 9:00-14:00 580 张三 化妆品 1001 20190301 9:00-14:00 2000 化妆品 1001 20190302 9:00-14:00 1300 化妆品 1001 20190303 9:00-14:00 1300 ''' # 按照柜台进行分组求和 dff = data.groupby(level = '柜台').sum()['交易额'] ''' 柜台 化妆品 7900 日用品 2600 蔬菜水果 2960 食品 3950 Name: 交易额, dtype: int64 ''' #标准差 data = pd.DataFrame({'A':[3,3,3,3,3],'B':[1,2,3,4,5], 'C':[-5,-4,1,4,5],'D':[-45,15,63,40,50] }) ''' A B C D 0 3 1 -5 -45 1 3 2 -4 15 2 3 3 1 63 3 3 4 4 40 4 3 5 5 50 ''' # 平均值 data.mean() ''' A 3.0 B 3.0 C 0.2 D 24.6 dtype: float64 ''' # 标准差 data.std() ''' A 0.000000 B 1.581139 C 4.549725 D 42.700117 dtype: float64 ''' # 标准差的平方 data.std()**2 ''' A 0.0 B 2.5 C 20.7 D 1823.3 dtype: float64 ''' # 协方差 data.cov() ''' A B C D A 0.0 0.00 0.00 0.00 B 0.0 2.50 7.00 53.75 C 0.0 7.00 20.70 153.35 D 0.0 53.75 153.35 1823.30 ''' # 指定索引为 姓名,日期,时段,柜台,交易额 data = pd.read_excel(r'C:\Users\lenovo\Desktop\总结\Python\超市营业额.xlsx', usecols = ['姓名','日期','时段','柜台','交易额']) # 删除缺失值和重复值,inplace = True 直接丢弃 data.dropna(inplace = True) data.drop_duplicates(inplace = True) # 处理异常值 data.loc[data.交易额 < 200,'交易额'] = 200 data.loc[data.交易额 > 3000,'交易额'] = 3000 # 使用交叉表得到不同员工在不同柜台的交易额平均值 dff = pd.crosstab(data.姓名,data.柜台,data.交易额,aggfunc = 'mean') dff[:5] ''' 柜台 化妆品 日用品 蔬菜水果 食品 姓名 周七 NaN 590.0 NaN NaN 张三 1533.333333 NaN 600.0 NaN 李四 1650.000000 NaN 680.0 NaN 王五 NaN NaN 830.0 900.0 赵六 NaN NaN NaN 1075.0 ''' # 查看数据的标准差 dff.std() ''' 柜台 化妆品 82.495791 日用品 84.852814 蔬菜水果 120.277457 食品 123.743687 dtype: float64 ''' # 协方差 dff.cov() ''' 柜台 化妆品 日用品 蔬菜水果 食品 柜台 化妆品 6805.555556 NaN 4666.666667 NaN 日用品 NaN 7200.0 NaN NaN 蔬菜水果 4666.666667 NaN 14466.666667 NaN 食品 NaN NaN NaN 15312.5 '''
2020-05-07
标签:00,交易额,14,柜台,NaN,协方差,标准差,data,pandas 来源: https://www.cnblogs.com/hany-postq473111315/p/12844921.html