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

基于2015-01-01起始周的会员事件数据格式转换求助

Solution: Generate Nested Weekly Event Lists per Member

Got it, let's work through this problem together. I'll walk you through how to build that nested list structure for each member, aligned to weekly periods starting from 2015-01-01 using pandas. We'll assume your original DataFrame has columns like member_id, event_date, and event_type (1=注册, 2=结账, 3=取消).

Step 1: Prepare Your Data & Define Weekly Periods

First, let's make sure your date column is properly formatted, then generate the full range of weekly starting dates we need to cover (from 2015-01-01 up to the latest event date in your data).

import pandas as pd

# Example raw DataFrame (replace with your actual data)
raw_data = {
    'member_id': [101, 101, 102, 102],
    'event_date': ['2015-01-02', '2015-01-10', '2015-01-03', '2015-01-15'],
    'event_type': [1, 2, 1, 3]
}
df = pd.DataFrame(raw_data)
df['event_date'] = pd.to_datetime(df['event_date'])

# Define the starting week and generate all weekly periods
start_date = pd.to_datetime('2015-01-01')
end_date = df['event_date'].max()  # Extend to today with pd.Timestamp.today() if needed

# Use 'W-MON' for Monday-start weeks, 'W-SUN' for Sunday-start, or '7D' for fixed 7-day intervals
weekly_starts = pd.date_range(start=start_date, end=end_date, freq='W-MON')

Step 2: Create a Full Member-Week Grid

We need to ensure every member has a row for every week (even if they had no event). We'll create a cross join of unique members and weekly start dates.

# Get unique member IDs
unique_members = df['member_id'].unique()

# Create a grid of every member + every weekly start date
member_week_grid = pd.MultiIndex.from_product(
    [unique_members, weekly_starts],
    names=['member_id', 'week_start']
).to_frame(index=False)

Step 3: Merge with Event Data & Fill Missing Values

Now we'll merge this grid with your original event data, then fill in 0 for weeks where a member had no events.

# Map each event date to its corresponding weekly start date (match the freq from Step 1)
df['week_start'] = df['event_date'].dt.to_period('W-MON').dt.start_time

# Merge the grid with event data, keeping all weeks from the grid
merged_df = member_week_grid.merge(
    df,
    on=['member_id', 'week_start'],
    how='left'
)

# Fill missing event types with 0 (no event) and convert to integer
merged_df['event_type'] = merged_df['event_type'].fillna(0).astype(int)

Step 4: Generate the Nested List Structure

Finally, group by member ID and collect the weekly event types into ordered lists.

# Group by member and extract event_type lists in week order
nested_event_lists = merged_df.groupby('member_id')['event_type'].apply(list).tolist()

# Example output: [[1, 2, 0], [1, 0, 3]]
print(nested_event_lists)

Notes for Adjustments:

  • If you need weeks to start exactly on 2015-01-01 and every 7 days after (instead of natural calendar weeks), replace freq='W-MON' with freq='7D' in both Step 1 and the dt.to_period() call.
  • To include weeks up to the current date, set end_date = pd.Timestamp.today().

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:03:43