如何修改DataFrame列名,按频道统计YouTube唯一视频观看数
解决YouTube历史数据按频道统计唯一视频数的列名修改与代码优化
列名修改方法
如果你的代码是通过groupby+nunique()生成统计结果,可通过两种方式修改列名:
方法1:计算时直接指定列名
在调用reset_index时通过name参数直接设置自定义列名,一步到位:
import pandas as pd # 加载JSON数据(假设数据路径正确) df = pd.read_json('youtube_history.json') # 过滤有效视频记录(YouTube历史中标题以"Watched"开头的为视频观看记录) df = df[df['title'].str.startswith('Watched')].dropna(subset=['channel_title', 'video_id']) # 按频道分组统计唯一视频数,同时设置列名 channel_stats = df.groupby('channel_title')['video_id'].nunique().reset_index(name='No_of_unique_videos_viewed')
方法2:生成结果后重命名列
如果已经得到带nunique列的DataFrame,用rename方法修改:
# 假设已生成带nunique列的统计结果 channel_stats = channel_stats.rename(columns={'nunique': 'No_of_unique_videos_viewed'})
代码优化方案
处理这类统计需求,以下方案更高效且严谨:
方案1:小数据集简洁版
数据量较小时,直接用groupby+nunique()足够简洁,同时加入数据清洗步骤避免无效统计:
import pandas as pd df = pd.read_json('youtube_history.json') # 清洗数据:保留有效视频记录,去掉缺失频道或视频ID的行 clean_df = df[df['title'].str.startswith('Watched')][['channel_title', 'video_id']].dropna() # 统计唯一视频数 channel_stats = clean_df.groupby('channel_title')['video_id'].nunique().reset_index(name='No_of_unique_videos_viewed') # 按视频数降序排序(可选) channel_stats = channel_stats.sort_values(by='No_of_unique_videos_viewed', ascending=False)
方案2:大数据集高效版
当数据量极大时,先通过drop_duplicates去重再统计,性能更优:
import pandas as pd df = pd.read_json('youtube_history.json') clean_df = df[df['title'].str.startswith('Watched')][['channel_title', 'video_id']].dropna() # 先去重:同一频道下的同一视频只保留一条记录 unique_records = clean_df.drop_duplicates(subset=['channel_title', 'video_id']) # 统计每个频道的唯一视频数 channel_stats = unique_records.groupby('channel_title').size().reset_index(name='No_of_unique_videos_viewed') # 排序(可选) channel_stats = channel_stats.sort_values(by='No_of_unique_videos_viewed', ascending=False)
这种方式的核心是提前去除重复的视频观看记录,减少分组统计时的计算量,在百万级以上数据量时优势明显。
内容的提问来源于stack exchange,提问作者Mauricio Arias Olave
相关产品推荐
相关产品推荐

