繁体   English   中英

熊猫枢纽餐桌布置

[英]pandas pivot table arrangement

我想创建一个数据透视表并用于多个aggfuncs ; 特别是np.meannp.std pandas.pivot_tables的正常行为是将aggfuncs分层放置在顶部。 如果您只有一列value那没关系,但是我有7。这使得读取表有点乏味。 我希望能够将值放在层次结构的顶部,以便在每个value内都有一个mean和std列。 有办法做到这一点还是我可以解决?

谢谢你的帮助!

编辑:这是数据的一小部分摘录。

Col1   Col2    Col3    Col4     Col5     Col6   Col7    Col8   Col9    
A       A        0      4247     5684     2068   393    237    16286
A       A        0        0      2366     4159   3155   696    341     
A       B        18198    0        1114   1871   5392   1954   755  
A       B        17829    0      2695     2366   3768   1289   445
A       C        18352    0      3545     7508   5099   2071   1239 

我希望输出看起来像这样:

                  Col 3        Col 4        Col 5        Col 6        Col 7  ...
Col 1  Col 2   Mean   Std   Mean    Std   Mean   Std   Mean   Std   Mean   Std  ...
A      A       0      0     2123.5 2173.5 ...
       B       ...
       C       ...

我现在不打算进行所有计算,但我认为这很重要,因为这是一个格式问题。

我必须将您的行标题从“ Col 1” >>“ Col1”

import pandas as pd

df=pd.read_clipboard()

df

Col1   Col2    Col3    Col4     Col5     Col6   Col7    Col8   Col9    
A       A        0      4247     5684     2068   393    237    16286
A       A        0        0      2366     4159   3155   696    341     
A       B        18198    0        1114   1871   5392   1954   755  
A       B        17829    0      2695     2366   3768   1289   445
A       C        18352    0      3545     7508   5099   2071   1239 




  In [9]: import numpy as np

In [10]: np.round(df.groupby(['Col1', 'Col2']).agg(['mean', 'std']),4)
Out[10]:
              Col3              Col4               Col5               Col6  \
              mean       std    mean        std    mean        std    mean
Col1 Col2
A    A         0.0    0.0000  2123.5  3003.0825  4025.0  2346.1803  3113.5
     B     18013.5  260.9224     0.0     0.0000  1904.5  1117.9358  2118.5
     C     18352.0       NaN     0.0        NaN  3545.0        NaN  7508.0

                      Col7               Col8             Col9
                 std  mean        std    mean      std    mean         std
Col1 Col2
A    A     1478.5603  1774  1953.0289   466.5  324.562  8313.5  11274.8176
     B      350.0179  4580  1148.3414  1621.5  470.226   600.0    219.2031
     C           NaN  5099        NaN  2071.0      NaN  1239.0         NaN

我认为可以使用.describe()(具有均值和标准状态)和.pivot的组合来解决。 假设您有一个看起来像这样的DF:

print(df)

        City          Country                   lon
0       Dubai         United Arab Emirates   55.307484
254     Buenos Aires  Argentina             -58.381592
1002    Rosario       Argentina             -60.666500
1162    Punta Arenas  Chile                 -70.916473
1178    San Miguel    Argentina             -65.217590

并且您想要在每个国家/地区的“ lon”列上获取统计信息。 使用.describe获取统计信息:

stats = df.groupby('Country').describe()
#reset index so that you can specify the columns later
stats.reset_index(level = [0,1], inplace = True)
stats.head()
    Country level_1 lon
0   Albania count   1.0000
1   Albania mean    19.8318
2   Albania std     NaN
3   Albania min     19.8318
4   Albania 25%     19.8318

然后根据您的统计信息表创建数据透视表。 由于结果将是多索引的,因此您需要指定元组列以访问均值和标准列:

stats.pivot('Country', 'level_1')[[('lon', 'mean'), ('lon', 'std')]]

结果将是这样的:

    lon
level_1 mean    std
Country     
Albania 19.831800   NaN
Algeria 2.744837    3.323134
Angola  13.234444   NaN
Argentina   -63.806806  4.101027

让我知道这是否有帮助-祝你好运。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM