我正在分析 TMDB dataset on Kaggle与变量 release_year
相比,某些条目的变量 release_date
中存在的年份偏移了 40 年:
# Change to pandas datetime
tmdb_df['release_date'] = pd.to_datetime(tmdb_df['release_date'])
tmdb_df.query('release_date > datetime.date(2015,12,31)')[['release_date', 'release_year']].head()
###
#release_date release_year
#9849 2062-10-04 1962
#9850 2062-12-10 1962
#9851 2062-06-13 1962
#9852 2062-12-25 1962
#9853 2062-10-24 1962
我使用apply
想出了一个解决方案:
# Check for movies where the year on `release_date` are shifted
# when compared with `release_yer`
import datetime
# Change to pandas datetime
tmdb_df['release_date'] = pd.to_datetime(tmdb_df['release_date'])
def aux_func(row):
"""Fix year"""
if row['release_date'].year != row['release_year']:
return row['release_date'].replace(year=row['release_year'])
else:
return row['release_date']
# Apply fix
tmdb_df['release_date'] = tmdb_df[['release_date', 'release_year']].apply(aux_func, axis=1)
但我想知道是否可以使用 Pandas 的 transform
来解决这个问题,或者是否有其他方法。
最佳答案
如果希望始终是同一年,则首先将年份与日期连接起来,但不带年份
:
df = pd.DataFrame({'release_date':['2062-10-04','1980-12-10'],'release_year':[1962,1980]})
print (df)
release_date release_year
0 2062-10-04 1962
1 1980-12-10 1980
df['release_date'] = pd.to_datetime(df['release_year'].astype(str) +
df['release_date'].str[4:])
print (df)
release_date release_year
0 1962-10-04 1962
1 1980-12-10 1980
关于python - 使用 Pandas 实现替代解决方案 `transform`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47889559/