【发布时间】:2019-06-28 04:44:52
【问题描述】:
有很多类似标题的问题,但我无法解决我的数据集遇到的问题。
数据集:
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)
我得到的从宽到长的错误是:
ValueError: 操作数不能与形状一起广播 (95,) (431,)
由于我的数据集实际上有 526 列,所以我将它们分成两个列表,其中一个包含 95 个列名,即 i,其余 431 个是我需要在如示例数据集中所示的行。
【问题讨论】:
-
您没有转置您的数据集。不要称其为“转置”。转置为
df.T。 -
是的,但我想基本上将某些列转换为行。所以我想不出另一个词。
-
从宽到长...
-
这对任何人来说都不容易回答,因为您希望为您的实际数据找到一个解决方案,该解决方案包含 500 列。您不能在此站点上共享 500 列的数据集,并合理地期望任何人为它工作的解决方案。如果您改为制作一个不超过 5 列的更简单的版本并更清楚地解释您的问题,这将对您(从学习的角度)更有益,并且对我们更容易(因为我们是无偿的志愿者)。了解如何提供minimal reproducible example。
-
是的,完全同意,因为我共享的数据集是 500 多列的样本,我还在 Excel 表中创建了这些列进行实验,如果我得到这个样本的解决方案,我会能够将其转换为更大的数据集。看看我现在让它更短了。