根据日期计算嵌套循环中的帖子
Posted
技术标签:
【中文标题】根据日期计算嵌套循环中的帖子【英文标题】:Counting posts in a nested loop based on a date 【发布时间】:2018-07-05 23:33:33 【问题描述】:我需要计算今天/昨天/一周前/一个月前发布的帖子数量,从 json-dict 中提取 unix 格式的日期。通过 id 计算总和并从中制作一个表格。
但是,我花了很多时间弄清楚。
这是目前为止的代码:
posts_today = []
posts_yesterday = []
posts_week = []
posts_month = []
user_posted = []
today = pd.Timestamp('today')
yesterday = (pd.Timestamp('today')- pd.Timedelta(days=1))
week_ago = (pd.Timestamp('today') - pd.Timedelta(weeks=1))
month_ago = (pd.Timestamp('today') - pd.Timedelta(weeks=4))
一个月的循环本身:
for user_id in list(wall_pickle.keys())[0:100]:
for i in wall_pickle[user_id]['items']:
if ((pd.to_datetime(i['date']*10e8)) >= month_ago):
user_posted.append(user_id)
posts_month.append(1)
print(user_id,len(posts_month))
产生
产生:
6932 6<br>
6984 6<br>
7074 6<br>
7141 6<br>
13456 6<br>
13467 6<br>
19226 6<br>
30365 11<br>
43713 31<br>
44611 31<br>
58972 42<br>
73013 43<br>
74905 44<br>
75089 45<br>
84090 47<br>
86882 47<br>
125789 47<br>
128317 47<br>
137443 66<br>
147006 85<br>
164366 85<br>
165490 95<br>
...
左列是 id,左列是计数,但是它会以某种方式累积。
JSON 方案如下所示:wall_pickle.keys()
是用户 ID,每个 ID 都有一个列表 ['items']
和一个键 ['date']
请大家帮帮我!
【问题讨论】:
【参考方案1】:其实我自己找到了答案。不是pythonic,也不是很酷,但它在大约 41K uid 上运行得很快,帖子深度为 20。
posts_today = []
posts_3_days = []
posts_week = []
posts_month = []
today = pd.Timestamp(2018,1,26,0,0,0)
three_days_ago = (pd.Timestamp(2018,1,26,0,0,0)- pd.Timedelta(days=3))
week_ago = (pd.Timestamp(2018,1,26,0,0,0) - pd.Timedelta(weeks=1))
month_ago = (pd.Timestamp(2018,1,26,0,0,0) - pd.Timedelta(weeks=4))
for user_id in list(wall_pickle.keys()):
for i in wall_pickle[user_id]['items']:
if ((pd.to_datetime(i['date']*10e8)) >= today):
posts_today.append(user_id)
if ((pd.to_datetime(i['date']*10e8)) >= three_days_ago):
posts_3_days.append(user_id)
if ((pd.to_datetime(i['date']*10e8)) >= week_ago):
posts_week.append(user_id)
if ((pd.to_datetime(i['date']*10e8)) >= month_ago):
posts_month.append(user_id)
它会生成匹配期间出现的 uid 列表 - 如果 X uid 在一周内有 3 个帖子,则循环将添加 X uid 3 次。
它看起来很糟糕,但是从那时起您可以使用.value_counts()
并获得一个dict
,您可以将其映射到dataframe
,这非常方便。
类似这样的:
# make a proper dataframe and save
posts_today = pd.DataFrame(pd.Series(posts_today).value_counts())
posts_today.reset_index(inplace=True)
posts_today.columns=['user_id','daily_posts']
posts_today.to_csv(RAW+'posts_today.csv', index=False)
# the dict itself
posts_today_dict = pd.Series(posts_today['daily_posts'].values,
index=posts_today['user_id']).to_dict()
...等等
【讨论】:
以上是关于根据日期计算嵌套循环中的帖子的主要内容,如果未能解决你的问题,请参考以下文章
iOS不得姐项目--精华模块上拉下拉的注意事项,日期显示,重构子控制器,计算cell的高度(只计算一次),图片帖子的显示