使用python将一组重复的列转换为一个列

时间:2019-06-29 19:21:40

标签: python pandas dataframe

我有一个csv文件,其中包含重复的列组,并且我想将重复的列组转换为每个列。 我知道,对于这种问题,我们可以在python中使用功能melt,但仅当重复的列只有一个变量时才可以使用。

我已经找到了解决问题的简单方法,但是我认为这不是最好的方法。我将每个变量的重复列放入列表中,然后将所有重复变量放入更大的列表中。 然后,当迭代列表时,我对每个变量(同一组重复列的列表)使用melt。 最后,我将新数据帧连接为仅一个数据帧。 这是我的代码:

import pandas as pd

file_name='file.xlsx'
df_final=pd.DataFrame()

#create lists to hold headers & other variables
HEADERS = []
A = []
B=[]
C=[]

#Read CSV File
df = pd.read_excel(file_name, sheet_name='Sheet1')
#create a list of all the columns
columns = list(df)

#split columns list into headers and other variables
for col in columns:
    if col.startswith('A'):
        A.append(col)
    elif  col.startswith('B'):
        B.append(col)
    elif col.startswith('C') :
        C.append(col)
    else:
        HEADERS.append(col)


#For headers take into account only the first 17 variables 
HEADERS=HEADERS[:17]
#group column variables
All_cols=[]
All_cols.append(A)
All_cols.append(B)
All_cols.append(C)

#Create a final DF

for list in All_cols:

    df_x = pd.melt(df,
                  id_vars=HEADERS,
                  value_vars=list,
                  var_name=list[0],
                  value_name=list[0]+'_Val')
    #Concatenate DataFrames 1
    df_final= pd.concat([df_A, df_x],axis=1)

#Delete duplicate columns
df_final= df_final.loc[:, ~df_final.columns.duplicated()]


我想为我的问题找到一个更好的可维护解决方案,因此,我希望每个列组(相同变量)都有一个数据框。 作为python的初学者,我找不到这样做的方法。 我正在加入一张图片,该图片解释了我想要的内容,以防万一我不够清楚。 joined image

0 个答案:

没有答案