我的问题似乎重复,因为我发现不同的问题具有相同的错误,如下所示:
我尝试了这些帖子中提出的所有解决方案,但没有一个有效。我相信该错误可能是由我的数据集格式引起的,该格式具有字符串而不是数字,并且可能存在重复的整体。以下是我的数据集的示例:
| 协议号 | 活动 | 描述 |
|---|---|---|
| 1586212 | 走 | 一天两次 |
| 1586212 | 驾驶 | 5公里 |
| 1586212 | 驾驶 | 至少30分钟 |
| 1586212 | 睡觉 | 南 |
| 1586212 | 吃 | 1500卡路里 |
| 2547852 | 走 | 南 |
| 2547852 | 驾驶 | 南 |
| 2547852 | 吃 | 3200卡路里 |
| 2547852 | 吃 | 避免面食 |
| 2547852 | 睡觉 | 至少10小时 |
我想要实现的输出是:
| 协议号 | 走 | 驾驶 | 睡觉 | 吃 |
|---|---|---|---|---|
| 1586212 | 一天两次 | 5公里 | 南 | 1500卡路里 |
| 2547852 | 南 | 南 | 3200卡路里 | 至少10小时 |
我尝试使用pivot和pivot_table,代码如下:
df.pivot(index="protocol_no", columns="activity", values="description")
Run Code Online (Sandbox Code Playgroud)
但我仍然收到此错误:
ValueError: Index contains duplicate entries, cannot reshape
Run Code Online (Sandbox Code Playgroud)
不知道出了什么问题,所以任何帮助都会有帮助!
编辑:
我注意到我的数据包含错误以及 @DYZ 和 @SeaBean 用户所述的重复整体。因此,我编辑了数据库示例,并为我的数据集提供了正确的答案。希望它能帮助某人。
如果在使用时遇到重复索引错误,请尝试使用.piviot_table()with (或类似的东西)aggfunc='first'.pivot()
df.pivot_table(index="protocol_no", columns="activity", values="description", aggfunc='first')
Run Code Online (Sandbox Code Playgroud)
当您设置的列index具有重复值时,这是一种常见情况。使用aggfunc='first' (或有时aggfunc='sum'取决于条件)很可能可以解决问题。
结果:
activity drive eat sleep walk
protocol_no
1586212 5 km 1500 calories NaN twice a day
2547852 NaN 3200 calories At least 10 hours NaN
Run Code Online (Sandbox Code Playgroud)
根据您最新编辑的重复条目,您可以通过更改上面的函数来修改上面的解决方案aggfunc,如下所示:
df.pivot_table(index="protocol_no", columns="activity", values="description", aggfunc=lambda x: ' '.join(x.dropna()))
Run Code Online (Sandbox Code Playgroud)
在这里,我们将aggfuncfrom更改'first'为lambda x: ' '.join(x.dropna())。它无需添加多行代码即可实现与所需输出相同的结果。
结果:
activity drive eat sleep walk
protocol_no
1586212 5 km At least 30 min 1500 calories twice a day
2547852 3200 calories Avoid pasta At least 10 hours
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9075 次 |
| 最近记录: |