Я все еще новичок в python и не совсем уверен, как подойти к этому. У меня есть дата-фрейм о видеоиграх с названием, платформой, глобальными продажами и важными датами выпуска. Есть некоторые записи, где дата выпуска отсутствует. Я хотел бы заменить отсутствующее значение средней датой выпуска по платформе, если запись также имеет ненулевое значение глобальных продаж. Я не совсем уверен, как структурировать это так, чтобы оно вытягивало соответствующие средние значения, нужен ли мне вложенный цикл и т. Д. Пожалуйста, дайте мне знать, если я на правильном пути или что я могу сделать, чтобы включить это и если вам нужны какие-либо разъяснения, спасибо!
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, взятый из разбиения моего объекта datetime и поиска среднего значения года, которое я хочу использовать.
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, который является int, в зависимости от того, что проще. У меня просто никогда не было свиданий.
примерно так:
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()