透视蟒蛇

时间:2018-12-04 11:50:20

标签: python python-3.x pandas dataframe pivot

快速提问:

我有以下情况(表): Imported data frame

现在我想实现的是以下内容(或这些行中的内容,不必完全相同)

Goal

我不希望以下几列,所以我将其删除

data.drop(data.columns[[0,5,6]], axis=1,inplace=True)

我以为下面的代码行可以解决它,但是我缺少了什么?

pivoted = data.pivot(index=["Intentional homicides and other crimes","Unnamed: 2"],columns='Unnamed: 3', values='Unnamed: 4')

产生

ValueError:传递的值的长度为3395,索引表示2

与第8个问题不同的是,我不需要任何聚合函数,只是将值保持不变。

可以在以下位置找到数据:Data

1 个答案:

答案 0 :(得分:0)

方法 pandas.DataFrame.pivot 的问题在于它不处理索引中的重复值。解决此问题的一种方法是改用pandas.pivot_table函数。

df = pd.read_csv('Crimes_UN_data.csv', skiprows=[0], encoding='latin1')
cols = list(df.columns)
cols[1] = 'Region'
df.columns = cols
pivoted = pd.pivot_table(df, values='Value', index=['Region', 'Year'], columns='Series', aggfunc=sum)

尽管有 aggfunc 参数,它也不应该求和,但是会抛出 pandas.core.base.DataError:如果没有参数,则没有要聚合的数字类型提供。