You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并仅流媒体服务列值不同的重复电影数据行?

电影数据库合并:流媒体上线状态列的合并处理

我正在清洗一个由4个流媒体服务的电影CSV文件合并而成的数据库,部分电影同时在多个平台(如Prime和Hulu)上线。已经通过代码movies.groupby(compareColumns, group_keys=False)[allColumns].apply(lambda x: x.ffill().bfill())完成了其余列的合并,但目前剩余部分行仅onPrime/onNetflix等二进制状态列(0=未上线,1=已上线)值不同,其余内容完全一致。

现有数据示例

nameonPrimeonHuluotherColumn
Movie 110X
Movie 101X

目标输出

nameonPrimeonHuluotherColumn
Movie 111X

我尝试过filledgroups.fillna(value=0, axis=0, inplace=True, limit=1),但该操作会填充其他列的空值,而我仅需将onPrime/onHulu等列的0合并为1,不影响其他列。

解决方案

可以利用groupby结合聚合函数实现:对于流媒体状态列,用max函数——因为只要同一电影有一行显示已上线(值为1),合并后就应该保留1;其他内容一致的列,用first或max均可(因为值完全相同,结果无差异)。

代码示例1:分列指定聚合规则

# 定义流媒体状态列的列表
streaming_cols = ['onPrime', 'onHulu', 'onNetflix']
# 筛选出其他列
other_cols = [col for col in movies.columns if col not in streaming_cols]

# 分组聚合:其他列取第一个值,流媒体列取最大值
merged_movies = movies.groupby(compareColumns, group_keys=False).agg(
    **{col: 'first' for col in other_cols},
    **{col: 'max' for col in streaming_cols}
)

代码示例2:简洁版(适用于其他列内容完全一致的情况)

如果其他列经过之前的ffill/bfill后已经完全一致,直接对整个DataFrame用max聚合即可:

merged_movies = movies.groupby(compareColumns).max().reset_index()

max对字符串类型的列也能正常返回相同的值(因为所有行值一致),对流媒体列则会保留1的状态,完美符合需求。

内容的提问来源于stack exchange,提问作者george

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 16:30:46