簡體   English   中英

如何將列表中的前三個元素作為列,其余作為行 - Python

[英]How to make first three elements in a list as columns and the rest as rows - Python

df = pd.DataFrame({'Categotry':['Food','Animal'],
          'Detail':[['Name','Color','Sweet?','Bread','Brown','No','Rice','White','No','Sushi','N/A','No'],
                    ['Name','Predator?','Habitat','Tigers','Yes','Forests','Lions','Yes','Savanna','Deers','No','Hardwoods']]})

我有上面的數據框,我想將 Detail 列拆分如下: 在此處輸入圖片說明

我怎樣才能在 Python 中做到這一點?

謝謝您的幫助。

自定義功能

def process_details(details):
    cols, *data = np.reshape(details, (-1, 3))
    return pd.DataFrame(data, columns=cols)

我使用np.reshape因為我已經習慣了。 然而,這可以完成同樣的事情。

def process_details(details):
    cols, *data = zip(*[iter(details)] * 3)
    return pd.DataFrame(data, columns=cols)

並排

因為列名不匹配

pd.concat({
    cat: process_details(details)
    for cat, details in zip(*map(df.get, df))
}, sort=False, axis=1)

   Animal                        Food              
     Name Predator?    Habitat   Name  Color Sweet?
0  Tigers       Yes    Forests  Bread  Brown     No
1   Lions       Yes    Savanna   Rice  White     No
2   Deers        No  Hardwoods  Sushi    N/A     No

但如果你堅持堆疊它們

pd.concat({
    cat: process_details(details)
    for cat, details in zip(*map(df.get, df))
}, sort=False)

            Name Predator?    Habitat  Color Sweet?
Animal 0  Tigers       Yes    Forests    NaN    NaN
       1   Lions       Yes    Savanna    NaN    NaN
       2   Deers        No  Hardwoods    NaN    NaN
Food   0   Bread       NaN        NaN  Brown     No
       1    Rice       NaN        NaN  White     No
       2   Sushi       NaN        NaN    N/A     No

暫無
暫無

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

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