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

如何在Pandas中将分组统计结果拼接为新的字符串列?

解决方案

步骤拆解

  1. 从Timestamp列提取纯日期信息(匹配你按Date分组的需求)
  2. 统计同一(Date, Place, Sport)组合的出现次数
  3. 将次数与运动名称拼接成"Nx sport"格式的字符串
  4. 按(Date, Place)分组,把同组的拼接结果用逗号分隔合并

可复用代码实现

import pandas as pd

def format_sport_summary(df):
    # 1. 从Timestamp提取日期(仅保留年月日部分)
    df['Date'] = df['Timestamp'].dt.date
    
    # 2. 按三级维度分组统计运动出现次数
    sport_counts = df.groupby(['Date', 'Place', 'Sport']).size().reset_index(name='Count')
    
    # 3. 拼接成要求的格式字符串
    sport_counts['Formatted_Sport'] = sport_counts.apply(
        lambda row: f"{row['Count']}x {row['Sport']}", axis=1
    )
    
    # 4. 按Date+Place分组,合并同组的运动字符串
    result = sport_counts.groupby(['Date', 'Place'])['Formatted_Sport'].agg(', '.join).reset_index()
    
    return result

# 示例调用(替换成你的数据框即可)
# summary_df = format_sport_summary(your_dataframe)

原方法问题说明

你用groupby(['date', 'Place'])['Sport'].value_counts()得到的多级索引Series,重置索引后每一行是(Date, Place, Sport, 计数),若直接后续分组,容易因重复维度导致逻辑混乱。上面的方法先做三级分组统计,再拼接格式,最后两级分组合并,逻辑更清晰,不会出现分组异常。

示例效果

假设输入数据:

TimestampSportPlace
2024-05-01 09:00:00basketballGym A
2024-05-01 10:00:00basketballGym A
2024-05-01 14:00:00tennisGym A
2024-05-02 08:00:00soccerGym B

处理后输出:

DatePlaceFormatted_Sport
2024-05-01Gym A2x basketball, 1x tennis
2024-05-02Gym B1x soccer

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:10:13