我有以下数据框
df = pd.DataFrame({'ID':[1,2,3],'Q8_4_1':[1,2,3], 'Q8_5_1':[2,5,7],'Q8_4_2':[6,7,8], 'Q8_5_2':[9,10,11]})
这些列仅对不同的文件表示相同的变量。这样,结构如下Q8_4_(文件1),Q8_4_(文件2)等等。我想将数据框转换为以下表示形式:
当前,我正在运行一个不太理想的解决方案,其中涉及对列索引进行硬编码并按file_id拆分数据帧,如下所示:
df1 = df.iloc[:,:3]
df1.columns = ["ID","Q8_4","Q_5"]
df1["File_ID"] = 1
df2 = df.iloc[:,3:]
df2["ID"] = df["ID"]
df2.columns = ["ID","Q8_4","Q_5"]
df2["File_ID"] = 2
pd.concat([df1,df2],axis=0)
是否有任何熊猫功能可以帮助我实现可扩展的水平?
答案 0 :(得分:3)
'If further information is needed, don´t hesitate to contact us. Kind regards, José Ramirez'
答案 1 :(得分:1)
在groupby
和axis=1
上使用concat
的另一种方法:
col=df.columns[1:].str.rsplit('_',1).str[0]
final=pd.concat([g.stack().droplevel(1) for _,g in
df.set_index('ID').groupby(col,axis=1)],axis=1,keys=col).reset_index()
final=final.assign(File_ID=final.groupby('ID').cumcount()+1)
print(final)
ID Q8_4 Q8_5 File_ID
0 1 1 2 1
1 1 6 9 2
2 2 2 5 1
3 2 7 10 2
4 3 3 7 1
5 3 8 11 2