Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中基于其他列将特定列值转换为一行?_Python_Pandas_Pivot - Fatal编程技术网

如何在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我已经编辑了我的答案。您可以创建一个映射,如so
df['cols']='pro'+df.col2.astype(str)
?是的,我尝试了更新后的答案获取
ValueError:索引包含重复条目,无法重塑它与您提供的示例数据一起工作。您的完整数据集很可能有多行具有相同的“col1”和“col2”值。您可以通过执行
df2=df.append(df.loc[0])
然后执行
df2.pivot(index='col1',values='col2',columns='cols')
来复制此操作。您希望如何处理这些重复的行?我已删除了重复的行,并再次尝试,但遇到相同的错误。