我还是python的新手,并不完全确定该方法。我有一个有关视频游戏的数据框,其中包含标题,平台,全球销量和重要发布日期。有些条目缺少发布日期。如果条目的全球销售额也非0,我想用平台的平均发布日期替换缺失的值。我不确定如何构造它,以便获取适当的均值,是否需要嵌套循环等。请告诉我是否在正确的轨道上或可以采取什么措施将其合并如果您需要任何澄清,谢谢!
games.head()
Name Platform Global_Sales Release_Date
0 Grand Theft Auto: San Andreas PS2 20.81 2004-10-26
1 Grand Theft Auto V PS3 20.30 2013-09-17
2 Grand Theft Auto V PS4 18.46 2014-11-18
3 Grand Theft Auto: Vice City PS2 16.15 2002-10-28
4 Grand Theft Auto V X360 15.85 2013-09-17
games.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 28852 entries, 0 to 28851
Data columns (total 4 columns):
Name 28852 non-null object
Platform 28852 non-null category
Global_Sales 16025 non-null float64
Release_Date 27757 non-null datetime64[ns]
for date in games.Release_Date:
if pd.isnull(date) and games.Global_Sales !=0:
games.Release_Date = [mean Release_Year for appropriate Platform]
我还有另一个具有平均值的df:platform_means,取自拆分日期时间对象并找到我要使用的平均年值。
platform_means.head()
Platform Release_Year
0 3DS 2012.282895
1 DC 2000.077778
2 DS 2007.654777
3 GB 1999.375000
4 GBA 2003.180401
所以这将是我想要的示例,希望对您有所帮助。我可以使用Release_Date作为datetime或Release_Date,这是一个整数,具体取决于哪个更容易。我以前从未有过约会时间。
是这样的:
games.head()
Name Platform Global_Sales Release_Date
0 A PS2 20.81 2004-10-26
1 B GBA 20.30 nan
2 C PS4 00.00 nan
3 D PS2 nan nan
4 E X360 15.85 2013-09-17
对此:
games.head()
Name Platform Global_Sales Release_Date
0 A PS2 20.81 2004-10-26
1 B GBA 20.30 2003.18
2 C PS4 00.00 nan
3 D PS2 nan nan
4 E X360 15.85 2013-09-17
我一直在使用类似的东西,并且可以工作,但条件部分却没有。在有条件的情况下,我得到一个错误,但没有错误,我将替换所有缺少日期的行,而不是仅替换具有销售价值的行:
for index, row in games[games['Release_Date'].isnull()].iterrows():
if games['Global_Sales'] <= 0.01 | games['Global_Sales'].isnull():
games.loc[games.index == index, 'Release_Date'] =
platform_means.loc[platform_means.Platform == row['Platform'],
'Release_Year'].item()
答案 0 :(得分:2)
以下可能是您正在寻找的东西:
for index, row in games[games['Release_Date'].isnull()].iterrows():
games.loc[games.index == index, 'Release_Date'] = platform_means.loc[platform_means.Platform == row['Platform'],'Release_Year'].item()
答案 1 :(得分:0)
我会尝试使用pd.where
方法。参见docs。
games['Release_Date'].where(games['Release_Date'].isnull(),
games.join(platform_means, on='Platform')['Release_Year'])