Python 在Pandas中旋转-ValueError:索引包含重复的项,无法重塑形状
我对python和pandas非常陌生,我正在尝试转换一些数据。 我有一个包含三列的数据集,如下所示:Python 在Pandas中旋转-ValueError:索引包含重复的项,无法重塑形状,python,pandas,pivot,Python,Pandas,Pivot,我对python和pandas非常陌生,我正在尝试转换一些数据。 我有一个包含三列的数据集,如下所示: A B C col1 21-03-2019 1.2 col2 21-03-2019 23 col3 21-03-2019 45 col4 21-03-2019 2.4 col5 21-03-2019 78 col1 14-07-2019 0.1 col2
A B C
col1 21-03-2019 1.2
col2 21-03-2019 23
col3 21-03-2019 45
col4 21-03-2019 2.4
col5 21-03-2019 78
col1 14-07-2019 0.1
col2 14-07-2019 AM
col3 14-07-2019 CDM
col4 14-07-2019 66
col5 14-07-2019 0.1
A B C
col1 21-03-2019 1.2
col2 21-03-2019 23
col3 21-03-2019 45
col4 21-03-2019 2.4
col5 21-03-2019 78
col1 21-03-2019 0.1
col2 21-03-2019 AM
col3 21-03-2019 CDM
col4 21-03-2019 66
col5 21-03-2019 0.1
我正在使用B作为索引来透视数据帧,透视表工作得很好
import pandas as pd
# creating a dataframe
df = pd.DataFrame({'A': ['col1', 'col2', 'col3', 'col4', 'col5', 'col1', 'col2', 'col3' ,'col4', 'col5'],
'B': [21-03-2019,21-03-2019,21-03-2019,21-03-2019,21-03-2019, 14-07-2019,14-07-2019,14-07-2019,14-07-2019,14-07-2019],
'C': [1.2, 23, 45, 2.4, 78, 0.1, 'AM', 'CDM', 66, 0.1]})
df.pivot(index='B', columns='A', values='C')
A col1 col2 col3 col4 col5
B
21-03-2019 1.2 23 45 2.4 78
14-07-2019 0.1 AM CDM 66 0.1
但在我的dataframe中,所有记录的B列都是相同的,如下所示:
A B C
col1 21-03-2019 1.2
col2 21-03-2019 23
col3 21-03-2019 45
col4 21-03-2019 2.4
col5 21-03-2019 78
col1 14-07-2019 0.1
col2 14-07-2019 AM
col3 14-07-2019 CDM
col4 14-07-2019 66
col5 14-07-2019 0.1
A B C
col1 21-03-2019 1.2
col2 21-03-2019 23
col3 21-03-2019 45
col4 21-03-2019 2.4
col5 21-03-2019 78
col1 21-03-2019 0.1
col2 21-03-2019 AM
col3 21-03-2019 CDM
col4 21-03-2019 66
col5 21-03-2019 0.1
在这种情况下,pivot失败,出现以下错误:
ValueError:索引包含重复的条目,无法重塑
我尝试重置索引(虽然我不知道重置索引意味着什么)df.pivot(index='B',columns='B',values='C')。重置索引('B')
我的预期产出是:
A col1 col2 col3 col4 col5
B
21-03-2019 1.2 23 45 2.4 78
21-03-2019 0.1 AM CDM 66 0.1
我怎样才能解决这个问题?有人能帮我吗?如果每个组都有
col1
,首先可以通过比较值和累计和来创建helper列g
:
对于无聚合解决方案,请使用:
或按第一个值进行聚合时,可使用:
最后一个是可以删除多索引级别的帮助程序:
df1 = df1.reset_index(level=1, drop=True)
print (df1)
A col1 col2 col3 col4 col5
B
21-03-2019 1.2 23 45 2.4 78
21-03-2019 0.1 AM CDM 66 0.1
如果每个组都存在col1
,并且首先可以通过比较值和累计和来创建辅助列g
:
对于无聚合解决方案,请使用:
或按第一个值进行聚合时,可使用:
最后一个是可以删除多索引级别的帮助程序:
df1 = df1.reset_index(level=1, drop=True)
print (df1)
A col1 col2 col3 col4 col5
B
21-03-2019 1.2 23 45 2.4 78
21-03-2019 0.1 AM CDM 66 0.1
在这种情况下,您希望如何聚合C
?您好@LearneR,欢迎使用Python/Pandas!要了解有关重置索引之类的更多信息,您可能会发现这很有用。@yatu:我并不真正希望C进行任何聚合。我只希望值显示为-is。Panda的一个问题是,它不知道使用什么逻辑来组合行,因为B
对所有行都是相同的。第一个col1
与第二个有什么区别?在第一个数据帧中,是B
的不同值,但在第二个数据帧中,Pandas不确定该做什么。您是否总是希望以五人一组为中心?您能解释一下底层逻辑吗?在这种情况下,您希望如何聚合C
?您好@LearneR,欢迎使用Python/Pandas!要了解有关重置索引之类的更多信息,您可能会发现这很有用。@yatu:我并不真正希望C进行任何聚合。我只希望值显示为-is。Panda的一个问题是,它不知道使用什么逻辑来组合行,因为B
对所有行都是相同的。第一个col1
与第二个有什么区别?在第一个数据帧中,是B
的不同值,但在第二个数据帧中,Pandas不确定该做什么。您是否总是希望以五人一组为中心?你能解释一下基本的逻辑吗?非常感谢你提供这个解决方案。我使用了带有set\u index()
和unstack()
的一个,它对我所有的数据集都非常有效。我真的需要深入研究熊猫。如果没有你的回应,我自己也不会想到这个解决方案。再次感谢。非常感谢您的解决方案。我使用了带有set\u index()
和unstack()
的一个,它对我所有的数据集都非常有效。我真的需要深入研究熊猫。如果没有你的回应,我自己也不会想到这个解决方案。再次感谢。