我有一个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