python - 使用 Pandas 实现替代解决方案 `transform`

标签 python pandas dataframe

我正在分析 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/

相关文章:

python - 在 Django 中测试电子邮件发送

python - 如何用 1 和 0 替换时间戳?

python - 将某些索引名称(字符串)复制到新的数据帧

python - 如何根据 id 外部合并 3 个或更多数据集并使用一列进行比较?

python - 属性错误 : 'numpy.ndarray' object has no attribute 'columns'

python - 以内存有效的方式迭代添加 pandas 数据帧

php - 使用 Python 或 PHP 从 Treenode 创建 XML

python - 在 WTForms 字段上设置数据属性

python - Pytest 警告 : Module already imported so cannot be rewritten: pytest_remotedata

python - 导入错误 : No module named pandas