Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从数据透视表中的小计中获取总百分比_Python_Pandas - Fatal编程技术网

Python 从数据透视表中的小计中获取总百分比

Python 从数据透视表中的小计中获取总百分比,python,pandas,Python,Pandas,我有以下数据帧 from io import StringIO incsv = StringIO("""Date,State,City,Tools,Size,y 20130320,AZ,Phoenix,A,4,1000 20130320,AZ,Tempe,B,4,1100 20130320,NY,NYC,C,1,900 20130320,NY,NYC,C,2,1300 20130320,NY,Albany,D,1,800 20130320,AZ,Phoenix,E,1,800 20130320,

我有以下数据帧

from io import StringIO
incsv = StringIO("""Date,State,City,Tools,Size,y
20130320,AZ,Phoenix,A,4,1000
20130320,AZ,Tempe,B,4,1100
20130320,NY,NYC,C,1,900
20130320,NY,NYC,C,2,1300
20130320,NY,Albany,D,1,800
20130320,AZ,Phoenix,E,1,800
20130320,AZ,Phoenix,F,4,800
""")

df = pd.read_csv(incsv, index_col=['Date'], parse_dates=True)


df
          State City  Tools Size y
Date                    
2013-03-20  AZ  Phoenix A   4   1000
2013-03-20  AZ  Tempe   B   4   1100
2013-03-20  NY  NYC     C   1   900
2013-03-20  NY  NYC     C   2   1300
2013-03-20  NY  Albany  D   1   800
2013-03-20  AZ  Phoenix E   1   800
2013-03-20  AZ  Phoenix F   4   800
我试图计算每个工具大小占州/市小计的百分比。我的下一步是:

dftest=pd.pivot_table(df,index=['State'],columns=['City','Size'],values="y",aggfunc='count',margins=True)
test=dftest.stack('City').stack('Size')
test


State  City     Size
AZ     All              4.0
       Phoenix  1       1.0
                4       2.0
       Tempe    4       1.0
NY     Albany   1       1.0
       All              3.0
       NYC      1       1.0
                2       1.0
All    Albany   1       1.0
       All              7.0
       NYC      1       1.0
                2       1.0
       Phoenix  1       1.0
                4       2.0
       Tempe    4       1.0
dtype: float64
我希望我的输出是

State  City     Size    Count PCT
AZ     All              4.0   1
       Phoenix  1       1.0   .25
                4       2.0   .5
       Tempe    4       1.0   .25
NY     All              3.0   1
       Albany   1       1.0   .333   
       NYC      1       1.0   .333
                2       1.0   .333
我在考虑尝试迭代行,找到“All”并再次迭代以创建一个包含结果的系列,但必须有一种更简单/更高效的方法来实现这一点。谢谢

test = test.to_frame()
test['PCT'] = test.groupby(level=0).transform(lambda x: x/x.max())
输出:

                      0       PCT
State City    Size               
AZ    Phoenix 1     1.0  0.250000
              4     2.0  0.500000
      Tempe   4     1.0  0.250000
      All           4.0  1.000000
NY    Albany  1     1.0  0.333333
      NYC     1     1.0  0.333333
              2     1.0  0.333333
      All           3.0  1.000000
All   Albany  1     1.0  0.142857
      NYC     1     1.0  0.142857
      Phoenix 1     1.0  0.142857
      NYC     2     1.0  0.142857
      Phoenix 4     2.0  0.285714
      Tempe   4     1.0  0.142857
      All           7.0  1.000000