有很多标题相似的问题,但是我无法解决我的数据集存在的问题。
数据集:
ID Country Type Region Gender IA01_Raw IA01_Class1 IA01_Class2 IA02_Raw IA02_Class1 IA02_Class2 QA_Include QA_Comments
SC1 France A Europe Male 4 8 1 J 4 1 yes N/A
SC2 France A Europe Female 2 7 2 Q 6 4 yes N/A
SC3 France B Europe Male 3 7 2 K 8 2 yes N/A
SC4 France A Europe Male 4 8 2 A 2 1 yes N/A
SC5 France B Europe Male 1 7 1 F 1 3 yes N/A
ID6 France A Europe Male 2 8 1 R 3 7 yes N/A
ID7 France B Europe Male 2 8 1 Q 4 6 yes N/A
UC8 France B Europe Male 4 8 2 P 4 2 yes N/A
需要输出:
ID Country Type Region Gender IA Raw Class1 Class2 QA_Include QA_Comments
SC1 France A Europe Male 01 K 8 1 yes N/A
SC1 France A Europe Male 01 L 8 1 yes N/A
SC1 France A Europe Male 01 P 8 1 yes N/A
SC1 France A Europe Male 02 Q 8 1 yes N/A
SC1 France A Europe Male 02 R 8 1 yes N/A
SC1 France A Europe Male 02 T 8 1 yes N/A
SC1 France A Europe Male 03 G 8 1 yes N/A
SC1 France A Europe Male 03 R 8 1 yes N/A
SC1 France A Europe Male 03 G 8 1 yes N/A
SC1 France A Europe Male 04 K 8 1 yes N/A
SC1 France A Europe Male 04 A 8 1 yes N/A
SC1 France A Europe Male 04 P 8 1 yes N/A
SC1 France A Europe Male 05 R 8 1 yes N/A
....
数据集中有列名为IA[X]_NAME, 其中X = 1..9,NAME = Raw, Class1和Class2。
我的目标是将这些列进行转置,使其看起来像所需输出表格中的样子,即IA将显示X值,正如raw和classes将显示它们各自的值。
为了实现这个目标,我对这些列进行了切片,分别是:
idVars = list(excel_df_final.columns[0:40]) + list(excel_df_final.columns[472:527]) #These contain columns like ID, Country, Type etc
valueVars = excel_df_final.columns[41:472].tolist() #All the IA_ columns
我不知道这一步是否有必要,但这给了我完美的列切片,但当我将其放入melt
中时,它不能正常工作。我已经尝试了几乎所有其他问题中可用的方法。
pd.melt(excel_df_final, id_vars=idVars,value_vars=valueVars)
我也尝试过这个:
excel_df_final.set_index(idVars)[41:472].unstack()
但是并没有起作用,以下是宽转长实现,也没有起作用:
pd.wide_to_long(excel_df_final, stubnames = ['IA', 'Raw', 'Class1', 'Class2'], i=idVars, j=valueVars)
我在使用 wide to long 方法时遇到了错误:
ValueError: operands could not be broadcast together with shapes (95,) (431,)
我的数据集实际上有 526 列,因此我将它们分成了两个列表,其中一个包含了 95 个列名作为 i
,剩下的 431 个列则需要按照示例数据集中所示的行显示。
df.T
。 - cs95