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

基于日期统计用户发帖量的嵌套循环计数问题求助

解决按User_id统计不同时间范围帖子数的累计问题

看起来你遇到的核心问题是全局列表的累计计数错误——你用的posts_month和user_posted是全局变量,每次循环新用户时没有重置,导致输出的是从第一个用户到当前用户的总帖子数,而不是当前用户自己的帖子数。下面是具体的修复方案和优化思路:

问题根源分析

你的原始代码中,posts_month是一个全局列表,每找到一个符合条件的帖子就追加一个1,len(posts_month)自然会累计所有之前用户的帖子数量。要统计单个用户的帖子数,需要为每个用户单独维护计数器,而不是共用全局列表。

完整解决方案

我们可以用字典来存储每个用户的各时间段帖子数,最后转成DataFrame生成表格,逻辑更清晰,也避免累计问题:

1. 先定义准确的时间界限

建议用normalize()去掉时分秒,避免因时间差导致的日期判断错误:

import pandas as pd

# 计算时间节点,仅保留日期部分
today = pd.Timestamp.today().normalize()
yesterday = today - pd.Timedelta(days=1)
week_ago = today - pd.Timedelta(weeks=1)
month_ago = today - pd.Timedelta(days=30)  # 用days=30比weeks=4更接近自然月

2. 遍历用户并统计帖子数

为每个用户单独初始化计数器,遍历完该用户的所有帖子后,再记录结果:

# 初始化结果字典,key是user_id,value是各时间段的计数
user_post_stats = {}

# 遍历前100个用户(和你的原始范围一致)
for user_id in list(wall_pickle.keys())[:100]:
    # 初始化当前用户的统计计数器
    current_stats = {
        '今日帖子数': 0,
        '昨日帖子数': 0,
        '一周内帖子数': 0,
        '一月内帖子数': 0
    }
    
    # 遍历该用户的所有帖子
    for item in wall_pickle[user_id]['items']:
        # 转换Unix时间戳为datetime,用unit='s'自动处理单位(如果你的timestamp是秒级)
        # 如果是毫秒级就用unit='ms',根据你的实际数据调整
        post_date = pd.to_datetime(item['date'], unit='s').normalize()
        
        # 判断帖子所属时间范围
        if post_date >= today:
            current_stats['今日帖子数'] += 1
        elif post_date >= yesterday:
            current_stats['昨日帖子数'] += 1
        elif post_date >= week_ago:
            current_stats['一周内帖子数'] += 1
        elif post_date >= month_ago:
            current_stats['一月内帖子数'] += 1
    
    # 将当前用户的统计结果存入字典
    user_post_stats[user_id] = current_stats
    # 打印当前用户的结果,现在就是该用户单独的计数了
    print(f"用户ID: {user_id} | 今日: {current_stats['今日帖子数']}, 昨日: {current_stats['昨日帖子数']}, 一周内: {current_stats['一周内帖子数']}, 一月内: {current_stats['一月内帖子数']}")

3. 生成美观的统计表格

用Pandas把结果字典转成DataFrame,直接得到结构化表格:

# 转换为DataFrame
stats_df = pd.DataFrame.from_dict(user_post_stats, orient='index')
stats_df.index.name = 'user_id'

# 打印表格
print("\n用户帖子统计表格:")
print(stats_df)

# 导出为Excel/CSV(可选)
stats_df.to_excel('用户帖子统计.xlsx')
stats_df.to_csv('用户帖子统计.csv')

关键优化点

  • 避免全局变量累计:每个用户单独维护计数器,确保统计的是当前用户的帖子数。
  • 时间戳转换更可靠:用unit参数替代手动乘系数,避免计算错误。
  • 日期判断更准确:用normalize()去掉时分秒,确保"今日"是指当天0点到24点的帖子。
  • 结构化存储:用字典+DataFrame的方式,方便后续分析和导出。

内容的提问来源于stack exchange,提问作者Максим Керемет

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:27:44