簡體   English   中英

在Pandas DataFrame中轉置選定的MultiIndex級別

[英]Transposing selected MultiIndex levels in Pandas DataFrame

我有一個MultiIndexed DataFrame:

import pandas as pd
import numpy as np

l0, l1 = ['A', 'B'],['a', 'b']
c0 = ['c1', 'c2', 'c3']
data = np.arange(12).reshape(4,3)
df = pd.DataFrame(data=data, 
                  index=pd.MultiIndex.from_product([l0,l1]),
                  columns=c0)

>>>
     c1  c2  c3
A a   0   1   2
  b   3   4   5
B a   6   7   8
  b   9  10  11

我想轉置MultiIndex和各列的級別,以便得到:

df2 = pd.DataFrame(index=pd.MultiIndex.from_product([l0, c0]),
                   columns=l1)

>>>
    a    b
A c1  NaN  NaN
  c2  NaN  NaN
  c3  NaN  NaN
B c1  NaN  NaN
  c2  NaN  NaN
  c3  NaN  NaN

很顯然,我想填充正確的值。 我的解決方案當前是使用帶有迭代器的map,但是感覺熊貓會擁有一些本機的方法。 我是對的,有沒有更好(更快)的方法?

from itertools import product
def f(df, df2, idx_1, col_0):
    df2.loc[(slice(None), col_0), idx_1] = \
        df.loc[(slice(None), idx_1), col_0].values
m = map(lambda k: f(df, df2, k[0], k[1]), product(l1, c0))
list(m) # <- to execute

>>> df2
>>>
      a   b
A c1  0   3
  c2  1   4
  c3  2   5
B c1  6   9
  c2  7  10
  c3  8  11

首先堆積列,然后堆積要成為新列的級別:

df.stack().unstack(level=1)
Out: 
      a   b
A c1  0   3
  c2  1   4
  c3  2   5
B c1  6   9
  c2  7  10
  c3  8  11

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM