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
相关产品推荐
相关产品推荐

