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

如何按rc_id计算两个DataFrame中impacted_users列的标准差并新增std列

解决方案

实现思路

无需全量拼接两个DataFrame,先对df2按rc_id分组预存每组的impacted_users数据,再与df1关联,针对每个rc_id合并两组数据计算标准差,减少不必要的数据复制,提升效率。

代码实现

import pandas as pd
import numpy as np

# 对df2按rc_id分组,保存每组的impacted_users列表
df2_grouped = df2.groupby('rc_id')['impacted_users'].agg(list).reset_index(name='df2_values')

# 关联df1和df2的分组结果
merged_df = df1.merge(df2_grouped, on='rc_id', how='left')

# 计算std列:合并当前行的impacted_users与df2_values,计算样本标准差并保留两位小数
merged_df['std'] = merged_df.apply(
    lambda row: np.std([row['impacted_users']] + row['df2_values'], ddof=1).round(2),
    axis=1
)

# 调整列名与时间戳格式,匹配期望输出
merged_df = merged_df.rename(columns={'rc_id': 'id'})
merged_df['timestamp'] = merged_df['timestamp'] + ' 11:00:00'

# 提取目标列
result = merged_df[['id', 'timestamp', 'impacted_users', 'std']]
print(result)

代码解释

  • 分组预存df2数据:通过groupby将df2中每个rc_id对应的所有impacted_users值转为列表存储,避免后续重复分组计算。
  • 关联数据:用merge将df1与预存的df2分组结果按rc_id匹配,确保每个rc_id能获取到两组关联数据。
  • 计算标准差:通过apply逐行处理,合并df1的单个值与df2的列表数据,使用np.std计算样本标准差(ddof=1)并保留两位小数,与示例结果一致。
  • 格式调整:重命名列名、补充时间戳后缀,生成与期望输出一致的结果。

输出结果

id           timestamp  impacted_users     std
0  296  2022-10-29 11:00:00             145   27.21
1  100  2022-10-29 11:00:00              50  117.36

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:10:31