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

求助实现简单Pandas行列转换与日期关联金额计算

需求说明

需要对DataFrame中的数值进行简单计算,步骤如下:

  • 先转换日期相关列的格式为日期类型;
  • 按姓名分组,对每组数据计算:
    • 距离日期2最近的金额(最近指日期1离日期2的时间差最小),记为最近金额(MRA)
    • 第二近的金额,记为第二近金额(2MRA)
  • 计算MRA / 2MRA的比值;
  • 根据比值是否≤0.5,输出二进制结果(1或0)。

原始数据

姓名金额日期1日期2
Jim1002021-06-102021-06-15
Jim2002021-05-112021-06-15
Jim1502021-03-052021-06-15
Bob3502022-06-102022-08-30
Bob3002022-08-122022-08-30
Bob4002021-07-062022-08-30

期望输出

姓名金额日期2最近金额(MRA)第二近金额(2MRA)MRA/2MRA是否≤0.5
Jim1002021-06-151002000.51
Bob3002022-08-303003500.850

实现代码(Python Pandas)

import pandas as pd

# 构造原始数据
df = pd.DataFrame({
    '姓名': ['Jim', 'Jim', 'Jim', 'Bob', 'Bob', 'Bob'],
    '金额': [100, 200, 150, 350, 300, 400],
    '日期1': ['2021-06-10', '2021-05-11', '2021-03-05', '2022-06-10', '2022-08-12', '2021-07-06'],
    '日期2': ['2021-06-15', '2021-06-15', '2021-06-15', '2022-08-30', '2022-08-30', '2022-08-30']
})

# 转换日期列为datetime类型
df['日期1'] = pd.to_datetime(df['日期1'])
df['日期2'] = pd.to_datetime(df['日期2'])

# 计算日期1与日期2的天数差绝对值,用于判断远近
df['时间差'] = (df['日期2'] - df['日期1']).dt.days.abs()

# 按姓名分组,按时间差升序排序后取每组前2条数据
grouped = df.groupby('姓名').apply(lambda x: x.sort_values('时间差').head(2)).reset_index(drop=True)

# 提取每组的最近和第二近金额
result = grouped.groupby('姓名').agg(
    日期2=('日期2', 'first'),
    最近金额MRA=('金额', 'first'),
    第二近金额2MRA=('金额', 'last')
).reset_index()

# 计算比值和二进制结果
result['MRA/2MRA'] = (result['最近金额MRA'] / result['第二近金额2MRA']).round(2)
result['是否≤0.5'] = (result['MRA/2MRA'] <= 0.5).astype(int)

# 合并原始数据的对应金额列,对齐输出格式
final_result = pd.merge(
    df[['姓名', '金额', '日期2']].drop_duplicates(subset=['姓名', '日期2']),
    result,
    on=['姓名', '日期2']
)

# 调整列顺序为期望格式
final_result = final_result[['姓名', '金额', '日期2', '最近金额MRA', '第二近金额2MRA', 'MRA/2MRA', '是否≤0.5']]

print(final_result)

代码说明

  1. 先转换日期列格式,确保能正确计算时间差;
  2. 通过时间差字段判断日期1与日期2的接近程度;
  3. 按姓名分组排序后取前2条,分别对应最近和第二近的金额;
  4. 用astype(int)将布尔判断结果转为1/0格式的二进制值;
  5. 最后合并原始数据的金额列,匹配期望输出的列顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 18:18:50