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

如何为Pandas DataFrame分组补充缺失的Anger、Happiness行?

解决方法

要实现这个需求,我们可以通过构建时间戳分组与必填情绪的笛卡尔积,再和原始数据合并填充的方式来完成,步骤清晰且高效:

步骤1:准备原始数据

首先把你提供的数据转换成Pandas DataFrame:

import pandas as pd

data = [
    [1555414708025, 1555414723279, 'Valence', 2],
    [1555414708025, 1555414723279, 'Arousal', 6],
    [1555414708025, 1555414723279, 'Dominance', 2],
    [1555414708025, 1555414723279, 'Sadness', 1],
    [1555414813304, 1555414831795, 'Valence', 3],
    [1555414813304, 1555414831795, 'Arousal', 5],
    [1555414813304, 1555414831795, 'Dominance', 2],
    [1555414813304, 1555414831795, 'Sadness', 1],
    [1555414921819, 1555414931382, 'Valence', 1],
    [1555414921819, 1555414931382, 'Arousal', 7],
    [1555414921819, 1555414931382, 'Dominance', 2],
    [1555414921819, 1555414931382, 'Sadness', 1],
    [1555414921819, 1555414931382, 'Anger', 1]
]

df = pd.DataFrame(data, columns=['start_timestamp_milli', 'end_timestamp_milli', 'name', 'rating'])

步骤2:生成必填情绪的全量分组数据

我们需要确保每个时间戳分组都包含Anger和Happiness,先提取所有唯一的时间戳组合,再和必填情绪做笛卡尔积:

# 定义需要确保存在的情绪名称
required_names = ['Anger', 'Happiness']

# 获取所有唯一的时间戳分组(start+end的组合)
unique_groups = df[['start_timestamp_milli', 'end_timestamp_milli']].drop_duplicates()

# 生成笛卡尔积:每个时间分组都对应所有必填情绪
required_rows = unique_groups.assign(key=1).merge(pd.DataFrame({'name': required_names, 'key': 1}), on='key').drop('key', axis=1)

步骤3:合并数据并填充缺失值

把原始数据和刚生成的必填行合并,去重保留原始数据已有的行,最后把缺失的rating填充为0:

# 合并原始数据与必填行
combined_df = pd.concat([df, required_rows], ignore_index=True)

# 去重:保留每个(时间分组+情绪)的第一行(原始数据行会优先保留)
combined_df = combined_df.drop_duplicates(subset=['start_timestamp_milli', 'end_timestamp_milli', 'name'], keep='first')

# 填充缺失的rating为0,并转为整数类型
combined_df['rating'] = combined_df['rating'].fillna(0).astype(int)

# 可选:按时间分组和情绪排序,让结果更整齐
combined_df = combined_df.sort_values(by=['start_timestamp_milli', 'name']).reset_index(drop=True)

最终效果

运行完代码后,combined_df就会和你期望的结果完全一致:每个时间分组都包含Anger和Happiness,已存在的情绪保留原评分,新增的情绪评分自动设为0。

方法优势

  • 避开了循环分组处理,数据量大时效率更高
  • 逻辑直观,通过笛卡尔积确保所有必填情绪覆盖到每个时间分组
  • 去重步骤保证原始数据不会被覆盖,仅补充缺失项

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:29:42