python—在一列中查找重复项,替换另一列中该重复项的值

python—在一列中查找重复项,替换另一列中该重复项的值,python,pandas,dataframe,duplicates,Python,Pandas,Dataframe,Duplicates,我有一个由不同平台上的视频游戏标题组成的数据帧。它包含名称、评论家平均分数和用户平均分数等值。其中许多都缺少用户、评论家和/或ESRB评级的分数 我想做的是用不同平台上相同游戏的评分、评论员和用户分数(假设存在)替换缺少的评分、评论员和用户分数。我不太确定如何处理这个问题。(注意-我不想删除重复的名称,因为它们不是真正重复的行) 下面是dataframe的一个示例块(为了便于管理,我删除了一些不相关的列): 现在,头30行中没有出现任何重复,但例如,我在PS3、Wii、DS、PC和x360上有0

我有一个由不同平台上的视频游戏标题组成的数据帧。它包含名称、评论家平均分数和用户平均分数等值。其中许多都缺少用户、评论家和/或ESRB评级的分数

我想做的是用不同平台上相同游戏的评分、评论员和用户分数(假设存在)替换缺少的评分、评论员和用户分数。我不太确定如何处理这个问题。(注意-我不想删除重复的名称,因为它们不是真正重复的行)

下面是dataframe的一个示例块(为了便于管理,我删除了一些不相关的列):

现在,头30行中没有出现任何重复,但例如,我在PS3、Wii、DS、PC和x360上有007:Quantum of Solace。在所有的平台中,我对用户和评论家都有一个平均评分,同时也有一个评分

根据要求-以下是一些重复值的示例:

index   name    platform    critic_Score    user_score  rating
3862    Frozen: Olaf's Quest    DS  NaN NaN NaN
3358    Frozen: Olaf's Quest    3DS NaN NaN NaN
1785    007: Quantum of Solace  PS3 65  6.6 T
3120    007: Quantum of Solace  Wii 54  7.5 T
9507    007: Quantum of Solace  DS  65  NaN T
4475    007: Quantum of Solace  PS2 NaN NaN NaN
1285    007: Quantum of Solace  X360    65  7.1 T
14658   007: Quantum of Solace  PC  70  6.3 T
2243    007: The World is not Enough    PS  61  6.7 T
1204    007: The World is not Enough    N64 NaN NaN NaN
我已经将我的副本分离到它们自己的数据帧中(df1是我的原始游戏数据帧,df2是副本数据帧):

所以我可以看到我的副本和它们的值,但我当然不想手工填写副本中缺少的8500个值

我可以找到重复的名称,但我不知道如何用其他平台的“良好”值填充NaN值

我不知道该如何开始这项工作,如果你能给我一个方向的建议,我将不胜感激

现在-再加上一步-在我上面的007游戏示例中-不同平台的评论家和用户分数不一样(ps3游戏得到65分,wii游戏得到54分,PC得到70分)计算3的平均值应该是理想的解决方案,但如果太复杂,我会选择任何一个平台(正如您可能已经猜到的,我对python非常陌生)

我感谢你为我所付出的时间和努力

问候,

Jared

我很确定您需要的是:

df.groupby("name").mean()
如果要将这些结果与数据帧关联,可以使用:

df.join(df.groupby("name").mean(), on = "name", rsuffix = "_mean")?

根据游戏是否具有NaN值将游戏按平台分开,然后向其他平台查询游戏名称是否合理数据帧和一个完整的数据帧以某种方式建立在这个基础上?
现在,头30行中没有出现任何重复,但例如我在PS3、Wii、DS、PC和x360上有007:Quantum of Solace
。那么为什么不把
007:Quantum of Solace
也放在样本数据中,这对答案会更有帮助。@Ferris能行!Pablo C,谢谢你的分享。我不确定我是否在关注你——“名字”是什么意思在另一列中给我平均分?我仍然以NaN值结束,即使有非NaN值的副本:index na_sales eu_sales jp_sales other_sales Critist用户分数total_sales姓名冻结:Olaf's Quest 3610.000000 0.240 0.265000 0.000000 0.045000 NaN NaN 0.550000事实上,我想我明白你的意思了e说-我最初看到的这对夫妇跨平台拥有所有NaN值,我马上得出结论。我不确定如何将这一平均值回填到NaN值中-可能是一个if语句?@seuard
df.join(df.groupby(“name”).mean(),on=“name”,rsuffix=“\u mean”)
?Pablo C,谢谢你的持续帮助-你帮了我很大的忙。我现在在正确的数据帧中有了我需要的平均值,只需要在原始列中用同一行的平均值填充NaN值。我想得太多了-我正在考虑将所有平台分为不同的数据帧和d进行一些过滤,这是更直接的方式。谢谢!完美。谢谢!
df.groupby("name").mean()
df.join(df.groupby("name").mean(), on = "name", rsuffix = "_mean")?