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

Python:单级表与多级费用表的客户总计匹配追加

解决方案

要把df2的个人资金数据精准匹配到df1的对应客户总计行,同时让子行自动填充'-',可以按下面的步骤来操作:

1. 先明确数据结构

你的df1是多级索引表:第一层索引是客户名(a、b),第二层索引里,空值对应的是客户的总计行,具体币种(EUR、AUD等)对应的是子费用行;而df2是单级索引表,索引直接对应客户名,值是个人资金。

2. 给df1新增资金列并初始化

先给df1加一列(比如叫资金),默认把所有行都填成'-':

df1['资金'] = '-'

3. 把df2的资金匹配到总计行

接下来筛选出df1里的总计行(也就是第二层索引为空的那些行),然后把df2里对应客户的资金值赋值过去:

# 筛选出df1中的总计行(第二层索引为空)
total_rows_mask = df1.index.get_level_values(1) == ''

# 获取这些总计行对应的客户名
target_clients = df1.index[total_rows_mask].get_level_values(0)

# 把df2的资金值对应填充到总计行
df1.loc[total_rows_mask, '资金'] = df2.loc[target_clients].values

最终效果

运行完上面的代码后,df1就会变成你想要的格式:

原金额 资金
a           60  100
    EUR     10  -
    AUD     20  -
    USD     30  -
b           65  200
    EUR     40  -
    GBP     10  -
    HKD     15  -

小补充

如果你的df1里总计行的第二层索引不是空字符串,而是其他标记(比如'Total'),只需要把total_rows_mask里的条件改成对应的标记就行。比如:

total_rows_mask = df1.index.get_level_values(1) == 'Total'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:59:49