结果: date key values0 2017-05-01 a 2.5621571 2017-05-02 b 9.6048232 2017-05-03 c 4.7709683 2017-05-01 d 0.6548784 2017-05-02 a 8.8392815 2017-05-03 b 1.2111386 2017-05-01 c 9.5708867 2017-05-02 d 9.9150218 2017-05-03 a 8.551166-----key a b c ddate 2017-05-01 2.562157 NaN 9.570886 0.6548782017-05-02 8.839281 9.604823 NaN 9.9150212017-05-03 8.551166 1.211138 4.770968 NaN----- valuesdate key 2017-05-01 a 1.0 c 1.0 d 1.02017-05-02 a 1.0 b 1.0 d 1.02017-05-03 a 1.0 b 1.0 c 1.0------
1 #交叉表:crosstab 2 #默认情况下,crosstab计算因子的频率,比如用于str的数据透视分析 3 #pd.crosstab(index,columns,values=None,rownames=None 4 # ,colnames=None,aggfunc=None,margins=False,dropna=True,normalize=False) 5 df = pd.DataFrame({'A':[1,2,2,2,2], 6 'B':[3,3,4,4,4], 7 'C':[1,1,np.nan,1,1]}) 8 print(df) 9 print('------') 10 print(pd.crosstab(df['A'],df['B'])) 11 print('------') 12 #如果crosstab只接收两个series,他将提供一个频率表 13 #用A的唯一值,统计B唯一值的出现次数 (A,B)= (1,3)C出现了1次 (A,B)= (2,4)出现了3次 14 15 print(pd.crosstab(df['A'],df['B'],normalize=True))#以频率的方式显示 16 print('--------') 17 print(pd.crosstab(df['A'],df['B'],values=df['C'],aggfunc=np.sum))#values:根据因子聚合的值数组 18 #aggfunc:如果未传递values数组,则计算频率表,如果传递数组,则按照指定计算 19 #这里相当于以A和B界定分组,计算出每组中第三个系列C的值 20 print('--------') 21 print(pd.crosstab(df['A'],df['B'],values=df['C'],aggfunc=np.sum,margins=True)) 22 print('--------') 23 #margins:布尔值,默认值False,添加行/列边距(小计)结果: A B C0 1 3 1.01 2 3 1.02 2 4 NaN3 2 4 1.04 2 4 1.0------B 3 4A 1 1 02 1 3------B 3 4A 1 0.2 0.02 0.2 0.6--------B 3 4A 1 1.0 NaN2 1.0 2.0--------B 3 4 AllA 1 1.0 NaN 1.02 1.0 2.0 3.0All 2.0 2.0 4.0--------