[英]pandas pivot table arrangement
我想創建一個數據透視表並用於多個aggfuncs
; 特別是np.mean
和np.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.