python pandas交叉表,透视表对于处理数据来说非常方便,学习笔记总结如下:

#!/usr/bin/python
-- coding:utf-8 --
from future import division
import pandas as pd
import numpy as np
import  sys
import math
# reload(sys)
sys.setdefaultencoding( "utf-8" ) #解决字符编码报错
#pandas读文件
df = pd.read_csv('/home/hp/Desktop/James_Harden.csv',encoding='utf8')
df.tail()
print (df)
'''
对手 胜负 主客场  命中  投篮数  投篮命中率  3分命中率  篮板  助攻  得分
0    勇士  胜   客  10   23  0.435  0.444   6  11  27
1    国王  胜   客   8   21  0.381  0.286   3   9  27
2    小牛  胜   主  10   19  0.526  0.462   3   7  29
3    灰熊  负   主   8   20  0.400  0.250   5   8  22
4   76人  胜   客  10   20  0.500  0.250   3  13  27
5    黄蜂  胜   客   8   18  0.444  0.400  10  11  27
6    灰熊  负   客   6   19  0.316  0.222   4   8  20
7   76人  负   主   8   21  0.381  0.429   4   7  29
'''
#透视表
print (df.pivot_table([u'得分'],index=[u'对手',u'胜负',u'主客场']))#value即是要聚合的列,index
'''
得分
对手  胜负 主客场
76人 胜  客    27
负  主    29
勇士  胜  客    27
国王  胜  客    27
太阳  胜  客    48
小牛  胜  主    29
尼克斯 胜  主    37
客    31
开拓者 胜  客    48
掘金  胜  主    21
步行者 胜  主    29
客    26'''
print (df.pivot_table([u'得分'],index=[u'主客场',u'对手',u'胜负']))
'''
得分
主客场 对手  胜负
主   76人 负   29
小牛  胜   29
尼克斯 胜   37
掘金  胜   21
步行者 胜   29
灰熊  胜   38
负   22
爵士  胜   56
猛龙  负   38
篮网  胜   37
骑士  胜   35
鹈鹕  胜   26
客   76人 胜   27
勇士  胜   27
国王  胜   27
太阳  胜   48
尼克斯 胜   31
开拓者 胜   48
步行者 胜   26
湖人  胜   36
灰熊  胜   29
负   20
爵士  胜   29
老鹰  胜   29
黄蜂  胜   27'''
print (df.pivot_table([u'得分'],index=[u'胜负',u'主客场',u'对手']))
'''
得分
胜负 主客场 对手
胜  主   小牛   29
尼克斯  37
掘金   21
步行者  29
灰熊   38
爵士   56
篮网   37
骑士   35
鹈鹕   26
客   76人  27
勇士   27
国王   27
太阳   48
尼克斯  31
开拓者  48
步行者  26
湖人   36
灰熊   29
爵士   29
老鹰   29
黄蜂   27
负  主   76人  29
灰熊   22
猛龙   38
客   灰熊   20'''
print (df.pivot_table([u'得分'],index=[u'胜负',u'主客场'],columns=[u'对手'],fill_value=0,margins=1))
'''
得分
对手      76人  勇士  国王  太阳  小牛 尼克斯 开拓者  掘金 步行者  湖人  灰熊  爵士  猛龙  篮网  老鹰  骑士  鹈鹕  黄蜂        All
胜负  主客场
胜   主     0   0   0   0  29  37   0  21  29   0  38  56   0  37   0  35  26   0  34.222222
客    27  27  27  48   0  31  48   0  26  36  29  29   0   0  29   0   0  27  32.000000
负   主    29   0   0   0   0   0   0   0   0   0  22   0  38   0   0   0   0   0  29.666667
客     0   0   0   0   0   0   0   0   0   0  20   0   0   0   0   0   0   0  20.000000
All      28  27  27  48  29  34  48  21  27  36  27  42  38  37  29  35  26  27  32.040000'''
print (pd.pivot_table(df,index=[u'对手',u'胜负'],columns=[u'主客场'],values=[u'得分',u'助攻',u'篮板'],aggfunc=[np.mean],fill_value=0))
'''
mean
助攻      得分      篮板
主客场       主   客   主   客   主   客
对手  胜负
76人 胜     0  13   0  27   0   3
负     7   0  29   0   4   0
勇士  胜     0  11   0  27   0   6
国王  胜     0   9   0  27   0   3
太阳  胜     0   7   0  48   0   2
小牛  胜     7   0  29   0   3   0
尼克斯 胜    10   9  37  31   2   5
开拓者 胜     0   3   0  48   0   8
掘金  胜     9   0  21   0   8   0
步行者 胜    10  15  29  26   8   5
湖人  胜     0   9   0  36   0   4
灰熊  胜     8   7  38  29   4   5
负     8   8  22  20   5   4
爵士  胜    13   3  56  29   2   5
猛龙  负    11   0  38   0   6   0
篮网  胜     8   0  37   0  10   0
老鹰  胜     0  11   0  29   0   3
骑士  胜    13   0  35   0  11   0
鹈鹕  胜    17   0  26   0   1   0
黄蜂  胜     0  11   0  27   0  10
'''
print df.pivot_table([u'得分'],index=[u'对手',u'胜负'],aggfunc=(sorted(np.array(df[u'得分']),reverse=True)))
print (sorted(np.array(df[u'得分']),reverse=True))
'''
[56, 48, 48, 38, 38, 37, 37, 36, 35, 31, 29, 29, 29, 29, 29, 29, 27, 27, 27, 27, 26, 26, 22, 21, 20]'''
print (df.groupby(u'胜负').count())#统计胜负
'''
对手  主客场  命中  投篮数  投篮命中率  3分命中率  篮板  助攻  得分
胜负
胜   21   21  21   21     21     21  21  21  21
负    4    4   4    4      4      4   4   4   4'''
print (df.groupby(u'主客场').count())#统计主客场
'''
对手  胜负  命中  投篮数  投篮命中率  3分命中率  篮板  助攻  得分
主客场
主    12  12  12   12     12     12  12  12  12
客    13  13  13   13     13     13  13  13  13'''
print (df.describe())
'''              命中        投篮数     投篮命中率      3分命中率         篮板         助攻         得分
count  25.000000  25.000000  25.00000  25.000000  25.000000  25.000000  25.000000
mean    9.800000  21.160000   0.46116   0.406640   5.080000   9.480000  32.040000
std     3.013857   3.350124   0.10404   0.153846   2.722132   3.241913   8.724869
min     6.000000  15.000000   0.31600   0.143000   1.000000   3.000000  20.000000
25%     8.000000  19.000000   0.38100   0.286000   3.000000   8.000000  27.000000
50%     9.000000  21.000000   0.44000   0.400000   5.000000   9.000000  29.000000
75%    11.000000  23.000000   0.52600   0.462000   6.000000  11.000000  37.000000
max    19.000000  29.000000   0.76000   0.875000  11.000000  17.000000  56.000000'''
#groupby,value_count
v = pd.Series(df[u'胜负'])
print (pd.Series(df[u'胜负']).unique())
print (pd.Series(df[u'胜负']).count())
print (pd.Series(df[u'胜负']).value_counts(u'胜'))#百分比  即胜率
print (pd.Series(df[u'胜负']).value_counts())
print (pd.Series(df[u'主客场']).value_counts())
print (df.groupby(u'对手').count())
print (pd.pivot_table(df,index=[u'对手'],columns=[u'胜负'],aggfunc=len,values=[u'得分'] ,margins=True,fill_value=0))#几胜几负
'''     得分
胜负    胜  负 All
对手
76人   1  1   2
勇士    1  0   1
国王    1  0   1
太阳    1  0   1
小牛    1  0   1
尼克斯   2  0   2
开拓者   1  0   1
掘金    1  0   1
步行者   2  0   2
湖人    1  0   1'''
print (pd.pivot_table(df,index=[u'对手'],columns=[u'主客场'],aggfunc=len,values=[u'得分'] ,margins=True,fill_value=0))#几个主场,几个客场,len个数,相当于对value的count
'''
得分
主客场   主   客 All
对手
76人   1   1   2
勇士    0   1   1
国王    0   1   1
太阳    0   1   1
小牛    1   0   1
尼克斯   1   1   2
开拓者   0   1   1
掘金    1   0   1
步行者   1   1   2
湖人    0   1   1
灰熊    2   2   4
爵士    1   1   2'''
print (pd.pivot_table(df,index=[u'对手'],columns=[u'主客场'],values=[u'得分'] ,margins=True,fill_value=0))#主场客场各得多少分
'''
得分
主客场   主          客    All
对手
76人  29  27.000000  28.00
勇士    0  27.000000  27.00
国王    0  27.000000  27.00
太阳    0  48.000000  48.00
小牛   29   0.000000  29.00
尼克斯  37  31.000000  34.00
开拓者   0  48.000000  48.00
掘金   21   0.000000  21.00
步行者  29  26.000000  27.50'''
print (pd.pivot_table(df,index=[u'对手'],aggfunc=[np.mean,sum],values=[u'得分']))#平均得分,总得分
'''
得分   得分
对手
76人  28.00   56
勇士   27.00   27
国王   27.00   27
太阳   48.00   48
小牛   29.00   29
尼克斯  34.00   68
开拓者  48.00   48
掘金   21.00   21
步行者  27.50   55
湖人   36.00   36
灰熊   27.25  109'''
print (pd.pivot_table(df,index=[u'主客场'],columns=[u'胜负'],aggfunc=len,values=[u'得分'],margins=True))#主场客场各几场胜负)
'''
得分
胜负    胜  负 All
主客场
主     9  3  12
客    12  1  13'''
t1 = pd.pivot_table(df,index=[u'主客场'],columns=[u'胜负'],aggfunc=len,values=[u'得分'],margins=True)#主场客场各几场胜负)
print (t1.describe())
print (t1.columns)
print (t1.index)
#交叉表(交叉并聚合)
print (pd.crosstab(df[u'主客场'],df[u'胜负'],margins=True))
'''
胜负    胜  负  All
主客场
主     9  3   12
客    12  1   13
All  21  4   25'''
t2 = pd.crosstab(df[u'主客场'],df[u'胜负'],margins=True)
print (t2.columns)
print (t2.index)
'''
Index([u'', u'', u'All'], dtype='object', name=u'胜负')
Index([u'', u'', u'All'], dtype='object', name=u'主客场')
'''
print (t2.loc[u'主'][u'胜'])
print (t2.loc[u'主'][u'All'])
'''
9
12
'''
print ("主场胜率为 %.2f%%") %((t2.loc[u'主'][u'胜'])/(t2.loc[u'主'][u'All'])*100)
print (pd.crosstab([df[u'对手'],df[u'主客场']],df[u'胜负'],margins=True))
'''
胜负        胜  负  All
对手  主客场
76人 主     0  1    1
客     1  0    1
勇士  客     1  0    1
国王  客     1  0    1
太阳  客     1  0    1
小牛  主     1  0    1
尼克斯 主     1  0    1
客     1  0    1
开拓者 客     1  0    1
掘金  主     1  0    1
步行者 主     1  0    1
客     1  0    1
湖人  客     1  0    1
灰熊  主     1  1    2
客     1  1    2
爵士  主     1  0    1
客     1  0    1
猛龙  主     0  1    1
篮网  主     1  0    1
老鹰  客     1  0    1
骑士  主     1  0    1
鹈鹕  主     1  0    1
黄蜂  客     1  0    1
All      21  4   25'''
'''
python3.5软连2.7报错
升级pip
升级numpy
升级pandas
'''
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐