如何在python中基于其他列将特定列值转换为一行?
我有如下数据如何在python中基于其他列将特定列值转换为一行?,python,pandas,pivot,Python,Pandas,Pivot,我有如下数据 col1 col2 23 101 23 102 24 101 25 102 25 103 col1 pro_1 pro_2 pro_3 23 101 102 NA 24 101 NA NA 25 NA 102 103 我想基于col1透视col2。期望的输出如下所示 col1 col2 23 101 23 102 2
col1 col2
23 101
23 102
24 101
25 102
25 103
col1 pro_1 pro_2 pro_3
23 101 102 NA
24 101 NA NA
25 NA 102 103
我想基于col1透视col2。期望的输出如下所示
col1 col2
23 101
23 102
24 101
25 102
25 103
col1 pro_1 pro_2 pro_3
23 101 102 NA
24 101 NA NA
25 NA 102 103
尝试如下:
data.pivot(data,columns=['col_1'],values=['col_2'])
ValueError: The name col_1 occurs multiple times, use a level number
我得到了如下错误:
data.pivot(data,columns=['col_1'],values=['col_2'])
ValueError: The name col_1 occurs multiple times, use a level number
您需要提供有关要将
'col2'
中的值放入的列的信息。我想这就是你想要的:
mapping = {101: 'pro1', 102: 'pro2', 103: 'pro3'}
df['cols'] = df.col2.map(mapping)
df.pivot(index='col1', values='col2', columns='cols')
编辑:可以自动创建映射,如下所示:
df['cols'] = 'pro' + df.col2.astype(str)
Edi2:您可以检查数据是否有重复行,如下所示:
df.duplicated()
如果你只是想摆脱这些,你可以这样做
df.loc[~df.duplicated()].pivot(index='col1', values='col2', columns='cols')
我提供了上述数据的样本。但是我有1892个唯一的值。我不能手动映射所有值。@Magie我已经编辑了我的答案。您可以创建一个映射,如sodf['cols']='pro'+df.col2.astype(str)
?是的,我尝试了更新后的答案获取ValueError:索引包含重复条目,无法重塑它与您提供的示例数据一起工作。您的完整数据集很可能有多行具有相同的“col1”和“col2”值。您可以通过执行df2=df.append(df.loc[0])
然后执行df2.pivot(index='col1',values='col2',columns='cols')
来复制此操作。您希望如何处理这些重复的行?我已删除了重复的行,并再次尝试,但遇到相同的错误。