数据框:
| 姓名 | 发布年份 | 平台 |
|---|---|---|
| 雷曼竞技场 | 2001.0 | PS2 |
| 雷曼竞技场 | 2002.0 | 大湾区 |
| 雷曼竞技场 | 钠盐 | GC |
| 劲爆橄榄球 2004 | 2003.0 | XB |
| 劲爆橄榄球 2004 | 钠盐 | 大湾区 |
| 劲爆橄榄球 2004 | 钠盐 | PS2 |
我想用year_of_release相同游戏名称但在不同平台上的年份填充 NaN 列。有一个问题是相同的标题可能有不同的发行年份——在这种情况下,保留 NaN。
我决定首先创建一个列表,在其中过滤掉具有不同发行年份的相同标题,然后使用 apply 我尝试在列中填充 NaN year_of_release,排除标题落入列表的行。所有没有相同名称和同一年发布的东西,我决定保留为 NaN。我决定填中间,因为如果你选择中位数,那么 NaN 多的地方的名字就变成 NaN。目前,标题不会被创建的列表过滤。
创建一个列表,其中包含具有不同发行年份的相同标题:
excludae_list = df.groupby('name')['year_of_release'].agg(['min', 'max']).reset_index()
excludae_list = excludae_list[excludae_list['min'] != excludae_list['max']]
excludae_list = excludae_list['name']
填补列中的空白year_of_release:
df['year_of_release'] = df.groupby('name')['year_of_release'].apply(lambda x: x.fillna(np.mean(x)) if x.name not in exclude_list else np.nan)
如果我正确理解了这个问题,那么你可以用这个 orbasis 简单地解决它: