簡體   English   中英

如何在python數據框中將多列轉換為行?

[英]How to convert many columns into rows in python dataframe?

我有一個具有以下結構的數據框。 我需要將code1code2code3列中的所有值放入相同name不同行中。 同樣對於text列。

Name      Code1   text1  code2  text2  code3  text3     
Alexa     362     Eng    639    scien  563    maths
john      23      cri    36     ball   03     value

我想要的是它看起來像

Name      Code   text 
Alexa     362    Eng    
Alexa     639    scien  
Alexa     563    maths
john      23     cri    
john      36     ball   
john      03     value

對於每個名稱,您可以在單獨的數據框中添加帶有代碼和文本的新行。

r, c = df.shape  # original dataframe shape
df2 = pd.DataFrame()  # Create a new dataframe
for i in range(r):
    name = df.iloc[i, 0]
    for j in range(1, c, 2):
        df2 = df2.append({'Name': name, 'Code': df.iloc[i, j], 'Text': df.iloc[i, j + 1]},ignore_index=True)
print(df2)

df ,如下所示(注意所有標題均以小寫形式顯示以保持一致):

#    name  code1 text1  code2  text2  code3  text3
#0  Alexa    362   Eng    639  scien    563  maths
#1   john     23   cri     36   ball      3  value

執行以下操作:

df1=pd.melt(df, id_vars=["name"], value_vars=df[['code1','code2','code3']], var_name='initial code column', value_name="code")
df1=df1.drop(columns=['initial code column'])

df2=pd.melt(df, id_vars=["name"], value_vars=df[['text1','text2','text3']], var_name='initial text column', value_name="text")
df2=df2.drop(columns=['initial text column'])    #you don't need this either

diff= df2[df2.columns.difference(df1.columns)]
df=pd.concat([df1,diff],axis=1)

輸出:

#    name  code   text
#0  Alexa   362    Eng
#1   john    23    cri
#2  Alexa   639  scien
#3   john    36   ball
#4  Alexa   563  maths
#5   john     3  value

注釋:

  • 使用pd.melt創建df1以獲取一列下的所有代碼,分別為文本值創建df2
  • var_name ("initial code column") 是pd.melt創建的東西,有時很有用,但對你來說不是,所以刪除這個列; 與“初始文本列”相同
  • 使用differenceconcat來構建所需的df

暫無
暫無

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

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