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

Pandas分组操作中保留所有列的实现问题

Pandas分组统计保留所有列的解决方案

方法1:使用transform添加统计列(推荐)

transform会把分组聚合的结果映射回原数据的每一行,既能得到分组统计数,又能完整保留所有原始列。

步骤:

  1. 筛选出full_text包含'mental health'的数据
  2. 提取created_at的日期部分作为分组键(如果created_at本身就是date类型可跳过此步)
  3. 用groupby.transform计算每组的帖子数量并添加为新列

示例代码:

import pandas as pd

# 假设原始数据为df,先筛选目标数据
df_filtered = df[df['full_text'].str.contains('mental health', case=False, na=False)]

# 将datetime类型的created_at转换为日期格式
df_filtered['post_date'] = df_filtered['created_at'].dt.date

# 添加分组统计列,用index列计数(也可以用full_text,只要是非空列即可)
df_filtered['daily_post_count'] = df_filtered.groupby('post_date')['index'].transform('count')

# 结果保留所有原始列,同时新增每日统计数
print(df_filtered)

方法2:分组聚合后合并原数据

先单独统计每组的帖子数量,再通过merge将统计结果合并回原始数据,同样能保留所有列。

示例代码:

import pandas as pd

df_filtered = df[df['full_text'].str.contains('mental health', case=False, na=False)]
df_filtered['post_date'] = df_filtered['created_at'].dt.date

# 分组统计每日帖子数
daily_counts = df_filtered.groupby('post_date')['index'].count().reset_index(name='daily_post_count')

# 合并回原数据
df_result = df_filtered.merge(daily_counts, on='post_date')

print(df_result)

为什么之前的方法会丢失列?

普通的groupby聚合(比如df.groupby('post_date').count())会返回聚合后的汇总表,只包含分组键和聚合结果列,原始的full_text等列会被丢弃。而上面两种方法都是基于原始数据做扩展,不会丢失任何列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 16:12:40