繁体   English   中英

在 Pandas DataFrame 中交换和分组列名

[英]Swap and group column names in a pandas DataFrame

我有一个包含一些定量数据和一个定性数据的数据框。 我想使用 describe 来计算统计数据并使用定性数据按列分组。 但是我没有获得我想要的级别的顺序。 下面是一个例子:

df = pd.DataFrame({k: np.random.random(10) for k in "ABC"})
df["qual"] = 5 * ["init"] + 5 * ["final"]

数据DataFrame看起来像:

          A         B         C   qual
0  0.298217  0.675818  0.076533   init
1  0.015442  0.264924  0.624483   init
2  0.096961  0.702419  0.027134   init
3  0.481312  0.910477  0.796395   init
4  0.166774  0.319054  0.645250   init
5  0.609148  0.697818  0.151092  final
6  0.715744  0.067429  0.761562  final
7  0.748201  0.803647  0.482738  final
8  0.098323  0.614257  0.232904  final
9  0.033003  0.590819  0.943126  final

现在我想按qual列分组并使用describe计算统计描述符。 我做了以下事情:

ddf = df.groupby("qual").describe().transpose()
ddf.unstack(level=0)

我得到了

qual      final                          init                    
              A         B         C         A         B         C
count  5.000000  5.000000  5.000000  5.000000  5.000000  5.000000
mean   0.440884  0.554794  0.514284  0.211741  0.574539  0.433959
std    0.347138  0.284931  0.338057  0.182946  0.274135  0.355515
min    0.033003  0.067429  0.151092  0.015442  0.264924  0.027134
25%    0.098323  0.590819  0.232904  0.096961  0.319054  0.076533
50%    0.609148  0.614257  0.482738  0.166774  0.675818  0.624483
75%    0.715744  0.697818  0.761562  0.298217  0.702419  0.645250
max    0.748201  0.803647  0.943126  0.481312  0.910477  0.796395

我接近我想要的,但我想交换和分组列索引,例如:

                       A               B               C
qual      initial  final  initial  final  initial  final

有没有办法做到这一点?

使用columns.swaplevel然后sort_indexlevel=0axis='columns'

ddf = df.groupby('qual').describe().T.unstack(level=0)

ddf.columns = ddf.columns.swaplevel(0,1)
ddf = ddf.sort_index(level=0, axis='columns')

或者在一行中使用DataFrame.swaplevel而不是index.swaplevel

ddf = ddf.swaplevel(0,1, axis=1).sort_index(level=0, axis='columns')
          A          B          C     
qual  final init final init final init
count  5.00 5.00  5.00 5.00  5.00 5.00
mean   0.44 0.21  0.55 0.57  0.51 0.43
std    0.35 0.18  0.28 0.27  0.34 0.36
min    0.03 0.02  0.07 0.26  0.15 0.03
25%    0.10 0.10  0.59 0.32  0.23 0.08
50%    0.61 0.17  0.61 0.68  0.48 0.62
75%    0.72 0.30  0.70 0.70  0.76 0.65
max    0.75 0.48  0.80 0.91  0.94 0.80

尝试ddf.stack().unstack(level=[0,2]) ,代替 ddf.unstack(level=0)

暂无
暂无

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

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