You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于现有Pandas DataFrame生成按日期去重姓名的新DataFrame

问题原因

你第一步drop_duplicates的逻辑是正确的,执行后会得到3行数据,分别对应每个Name在Sep-2015下的最后一条Count记录。
错误出在你手动构造df2的逻辑:字典推导式中每个Name对应的value是完整的Count列全部3个值,同时传入的索引也是3个重复的Sep-2015,最终生成了3行的错误结果,和预期1行的结构不符。

修正方案

不需要手动构造DataFrame,直接使用Pandas内置的长表转宽表方法pivot即可实现需求,代码更简洁也不会出错:

import pandas as pd

df = pd.DataFrame((['Sep-2015',  'Adam',3 ],         
['Sep-2015',  'David',3],
['Sep-2015',  'Adam',4],                   
['Sep-2015',  'Adam' ,3],         
['Sep-2015',  'David',6],         
['Sep-2015' , 'Hardik',1],        
['Sep-2015' , 'David' ,3]),columns=['Date','Name','Count'])

# 保留每个Date+Name组合的最后一条记录
df = df.drop_duplicates(['Date', 'Name'], keep='last')

# 长表转宽表直接得到目标结构
df2 = df.pivot(index='Date', columns='Name', values='Count')

如果需要调整列顺序和你预期的完全一致,可以加一行重索引的代码:

df2 = df2[['Adam', 'Hardik', 'David']]

你也可以用groupby的写法省略单独去重的步骤,效果完全一致:

df2 = df.groupby(['Date', 'Name'], as_index=False)['Count'].last().pivot(index='Date', columns='Name', values='Count')

内容的提问来源于stack exchange,提问作者Sriram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 03:06:03