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