簡體   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