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

Pandas多DataFrame合并为单列:按CUS_ID分组先DAY后TIME_HOUR

解决方案:合并Pandas分组统计结果并调整展示顺序

我明白你需要把两个不同维度的分组统计结果合并成单列,并且按「每个用户先展示时段统计,再展示星期统计」的顺序排列(和你给出的示例格式匹配)。下面是具体的实现步骤:

步骤1:预处理分组统计结果

首先,我们给两个分组结果重命名统计列,同时重置索引以便后续添加排序标识:

import pandas as pd

# 模拟你的原始数据
raw_data = pd.DataFrame({
    'CUS_ID': [1176,1176,1192,1192,120,120,120,1269,1269,1269],
    'TIME_ID': [2012083016,2013030418,2012091609,2012101310,2012121410,2012121915,2012121915,2012070914,2012071309,2013031414],
    'TIME_HOUR': ['16h','18h','09h','10h','10h','15h','15h','14h','09h','14h'],
    'DAY': ['THU','MON','SUN','SAT','FRI','WED','WED','MON','FRI','THU']
})

# 生成分组统计,给统计列命名并重置索引
df_day = raw_data.groupby(['CUS_ID','DAY']).size().rename('counts').reset_index()
df_time = raw_data.groupby(['CUS_ID','TIME_HOUR']).size().rename('counts').reset_index()

步骤2:添加排序标识,控制展示顺序

我们给两类统计添加排序键,确保时段统计排在前面,星期统计排在后面:

# 排序键0:时段统计优先展示;排序键1:星期统计后续展示
df_time['sort_key'] = 0
df_day['sort_key'] = 1

步骤3:合并、排序并构建最终结果

合并两个数据集后,按用户ID、排序键排序,最后重新构建多级索引得到单列结果:

# 合并两个统计数据集
combined = pd.concat([df_time, df_day])

# 排序:先按用户ID分组,再按排序键控制展示顺序,最后按时段/星期名称排序
combined = combined.sort_values(by=['CUS_ID', 'sort_key', 'TIME_HOUR', 'DAY'])

# 构建最终的多级索引Series:一级索引为用户ID,二级索引为时段/星期,值为统计数
result = combined.set_index(
    ['CUS_ID', 
     combined.apply(lambda row: row['TIME_HOUR'] if row['sort_key'] == 0 else row['DAY'], axis=1)]
)['counts']

查看结果示例

比如查看CUS_ID=120的统计结果:

print(result.loc[120])

输出如下:

10h    1.0
15h    2.0
FRI    1.0
WED    2.0
Name: counts, dtype: float64

这样就完全符合你的需求:每个用户下先展示所有时段的统计值,再展示所有星期的统计值,结果是无NaN值的单列Series。


内容的提问来源于stack exchange,提问作者In Kyu Choi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:16:51