Pandas:关联日期汇率换算后按日汇总存取款金额的实现方法
实现方案
前置假设
- 交易DataFrame命名为
df_trans,包含字段:账号/取款金额/存款金额/交易日期/币种 - 欧元兑英镑汇率DataFrame命名为
df_eur_gbp,包含字段:日期/汇率(值为1欧元可兑换的英镑数量) - 美元兑英镑汇率DataFrame命名为
df_usd_gbp,包含字段:日期/汇率(值为1美元可兑换的英镑数量)
步骤说明
- 统一所有日期字段为datetime格式,避免关联失败
- 合并两个汇率表生成全币种汇率映射表,补充英镑本身的汇率(1:1)
- 交易表关联汇率表,匹配对应日期对应币种的英镑汇率
- 换算存取款金额为英镑单位
- 按日期分组汇总每日总存取款额
完整代码
import pandas as pd # 1. 统一日期格式 df_trans['交易日期'] = pd.to_datetime(df_trans['交易日期']) df_eur_gbp['日期'] = pd.to_datetime(df_eur_gbp['日期']) df_usd_gbp['日期'] = pd.to_datetime(df_usd_gbp['日期']) # 2. 合并汇率表,生成统一汇率映射 df_eur_gbp['币种'] = 'EUR' df_usd_gbp['币种'] = 'USD' # 拼接两个汇率表,补充GBP的汇率(1英镑=1英镑) df_rate = pd.concat([df_eur_gbp, df_usd_gbp], ignore_index=True) # 生成GBP的全量日期汇率,避免英镑交易匹配失败 gbp_dates = pd.date_range(start=df_trans['交易日期'].min(), end=df_trans['交易日期'].max()) df_gbp_rate = pd.DataFrame({'日期': gbp_dates, '汇率': 1, '币种': 'GBP'}) df_rate = pd.concat([df_rate, df_gbp_rate], ignore_index=True) # 3. 交易表关联汇率表 df_trans = df_trans.merge( df_rate, left_on=['交易日期', '币种'], right_on=['日期', '币种'], how='left' ) # 可选:检查是否有缺失汇率的记录,按需处理(删除/手动填充汇率) # print(df_trans[df_trans['汇率'].isna()]) # 4. 换算存取款金额为英镑 df_trans['取款金额_GBP'] = df_trans['取款金额'] * df_trans['汇率'] df_trans['存款金额_GBP'] = df_trans['存款金额'] * df_trans['汇率'] # 5. 按日期分组汇总 df_daily_summary = df_trans.groupby('交易日期', as_index=False).agg( 每日总取款额_GBP=('取款金额_GBP', 'sum'), 每日总存款额_GBP=('存款金额_GBP', 'sum') ) # 输出结果 print(df_daily_summary)
提示:如果交易数据中包含EUR/USD/GBP之外的其他币种,只需补充对应币种的每日汇率表,按上述EUR/USD的处理方式添加币种标识后拼入
df_rate即可正常匹配换算。
内容的提问来源于stack exchange,提问作者xhi4m
相关产品推荐
相关产品推荐

