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

Pandas多DataFrame分组计算各ID偏好周日月对应交易金额总和方法

Pandas 实现统计的完整代码
import pandas as pd

# 你提供的当月周数计算函数
def weekinmonth(dates):
    """获取日期对应当月的周数
    
    参数: 
        dates (pd.Series): 日期格式的Series
    返回值: 
        pd.Series: 对应日期的当月周数
    """
    firstday_in_month = dates - pd.to_timedelta(dates.dt.day - 1, unit='d')
    return (dates.dt.day-1 + firstday_in_month.dt.weekday) // 7 + 1

# ---------------------- 1. 读取/构造数据集(实际使用时替换为你自己的数据读取逻辑) ----------------------
# 交易数据集
df_trade = pd.DataFrame([
    [1, '2020-01-02', 1000],
    [1, '2020-01-09', 200],
    [1, '2020-01-08', 400]
], columns=['ID', 'Date', 'Amount'])
# 偏好数据集
df_pref = pd.DataFrame([
    [1, 3, 2]
], columns=['ID', 'Pref_Day_Of_Week_A', 'Pref_Week_Of_Month_A'])

# ---------------------- 2. 计算交易日期的衍生字段 ----------------------
# 先将日期列转为标准datetime格式
df_trade['Date'] = pd.to_datetime(df_trade['Date'])
# 计算交易日期对应的星期(规则为周一=0、周日=6,和你提供的偏好星期规则完全匹配)
df_trade['day_of_week'] = df_trade['Date'].dt.weekday
# 计算交易日期对应的当月周数
df_trade['week_of_month'] = weekinmonth(df_trade['Date'])

# ---------------------- 3. 关联数据并按ID分组统计 ----------------------
# 按ID关联交易数据和偏好数据
df_merge = pd.merge(df_trade, df_pref, on='ID', how='left')
# 分组计算每个ID的两个目标指标
result = df_merge.groupby('ID', as_index=False).agg(
    # 统计偏好星期的交易金额总和
    Amount_On_Pref_Day = ('Amount', lambda s: s[df_merge.loc[s.index, 'day_of_week'] == df_merge.loc[s.index, 'Pref_Day_Of_Week_A']].sum()),
    # 统计偏好月周的交易金额总和
    Amount_Pref_Week = ('Amount', lambda s: s[df_merge.loc[s.index, 'week_of_month'] == df_merge.loc[s.index, 'Pref_Week_Of_Month_A']].sum())
)

print(result)

运行后输出结果完全符合要求的结构:

ID  Amount_On_Pref_Day  Amount_Pref_Week
0   1                 1200               600

内容的提问来源于stack exchange,提问作者sinha-shaurya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 02:15:00