gpt4 book ai didi

Pandas Dataframe Reshape/Pivot - 索引错误中的重复值

转载 作者:行者123 更新时间:2023-12-01 12:22:45 25 4
gpt4 key购买 nike

我正在使用 Python 2.7 和 Pandas 0.19.2

我看过一些类似的问题/答案来解决这个问题,但仍然无法解决。

我有以下数据框:

          Date         name      objects
0 2005-11-17 Pete 6
1 2014-02-04 Rob 3
2 2012-02-13 Rob 2
3 2004-12-16 Julia 4
4 2012-02-13 Mike 9

我想按如下方式 reshape 它:

              Pete   Rob    Julia   Mike

2005-11-17 6 Nan Nan Nan
2014-02-04 Nan 3 Nan Nan
2012-02-13 Nan 2 Nan 9
2004-12-16 Nan Nan 4 Nan

我一直在尝试运行 df.pivot(index='Date', columns='name', value='objects') 但我得到一个 'index has duplicate value ' 错误。

我认为 pivotpivot_table 在这些情况下工作,因为索引和列之间基本上没有“冲突”(例如,“Rob”和“2014”的多个值-02-04' 在数据框中)。

我不希望聚合 - 只是 reshape 。同样在示例中,日期未按顺序排列 - 但这无关紧要。

我觉得这应该很容易解决,但我看不到。有人可以分享一些见解吗?

提前致谢。

最佳答案

您的真实数据似乎是重复的,请参见示例:

print (df)
Date name objects
0 2005-11-17 Pete 6
1 2014-02-04 Rob 3
2 2012-02-13 Rob 2
3 2004-12-16 Julia 4
4 2012-02-13 Mike 9 <-duplicates for 2012-02-13 and Mike
5 2012-02-13 Mike 18 <-duplicates for 2012-02-13 and Mike

解决方案是 pivot_table对于某些聚合函数,默认为 np.mean 但可以更改为 sum、'meadian'、firstlast.

df = df.pivot_table(index='Date', columns='name', values='objects', aggfunc=np.mean)
print (df)
name Julia Mike Pete Rob
Date
2004-12-16 4.0 NaN NaN NaN
2005-11-17 NaN NaN 6.0 NaN
2012-02-13 NaN 13.5 NaN 2.0 <-13.5 is mean
2014-02-04 NaN NaN NaN 3.0

另一种使用groupby、聚合函数和unstack的解决方案:

df = df.groupby(['Date','name'])['objects'].mean().unstack()
print (df)
name Julia Mike Pete Rob
Date
2004-12-16 4.0 NaN NaN NaN
2005-11-17 NaN NaN 6.0 NaN
2012-02-13 NaN 13.5 NaN 2.0
2014-02-04 NaN NaN NaN 3.0

检查是否重复可用 duplicatedboolean indexing :

df = df[df.duplicated(subset=['Date','name'], keep=False)]
print (df)
Date name objects
4 2012-02-13 Mike 9
5 2012-02-13 Mike 18

关于Pandas Dataframe Reshape/Pivot - 索引错误中的重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42612374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com