[英]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.