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

如何在pandas中根据Tax_Term匹配结果填充对应列的Tax_Amount值?

解决Pandas按条件填充列的问题

现有DataFrame

Tax_Amount  Rate  SGST  CGST  IGST  TDS Tax_Term
0       5697.0   9.0   NaN   NaN   NaN  NaN     CGST
1        954.0   9.0   NaN   NaN   NaN  NaN      TDS
2       1305.0   9.0   NaN   NaN   NaN  NaN     CGST
3       2724.0   9.0   NaN   NaN   NaN  NaN     SGST
4      18000.0   9.0   NaN   NaN   NaN  NaN     IGST

需求

当Tax_Term列的值与SGST、CGST、IGST、TDS列名匹配时,将对应行的Tax_Amount值填入该列。

预期输出

Tax_Amount  Rate    SGST    CGST     IGST    TDS Tax_Term
0       5697.0   9.0     NaN  5697.0      NaN    NaN     CGST
1        954.0   9.0     NaN   954.0      NaN  954.0      TDS
2       1305.0   9.0     NaN  1305.0      NaN    NaN     CGST
3       2724.0   9.0  2724.0     NaN      NaN    NaN     SGST
4      18000.0   9.0     NaN     NaN  18000.0    NaN     IGST

尝试的代码(未达预期)

final_df['SGST'] = final_df.query('Tax_Term == SGST')['Tax_Amount']
final_df['CGST'] = final_df.query('Tax_Term == CGST')['Tax_Amount']
final_df['IGST'] = final_df.query('Tax_Term == IGST')['Tax_Amount']
final_df['TDS'] = final_df.query('Tax_Term == TDS')['Tax_Amount']

解决方案

你这段代码的问题有两个:一是query语句里的列名没有加引号,无法正确匹配字符串;二是直接赋值会导致非匹配行被覆盖为NaN,破坏原有数据结构。以下两种方法可以实现需求:

方法一:循环+loc精准赋值

遍历目标列,针对每个列名匹配Tax_Term的行,将Tax_Amount的值填入对应列:

import pandas as pd

# 假设你的DataFrame是final_df
tax_cols = ['SGST', 'CGST', 'IGST', 'TDS']
for col in tax_cols:
    final_df.loc[final_df['Tax_Term'] == col, col] = final_df['Tax_Amount']

方法二:get_dummies生成哑变量(更简洁)

通过哑变量标记匹配行,再和Tax_Amount相乘得到对应值,最后替换原列:

import pandas as pd

tax_cols = ['SGST', 'CGST', 'IGST', 'TDS']
# 生成哑变量并乘以Tax_Amount得到对应值
dummy_vals = pd.get_dummies(final_df['Tax_Term'])[tax_cols] * final_df['Tax_Amount']
# 替换原列
final_df[tax_cols] = dummy_vals

这两种方法都能准确将Tax_Amount填入匹配的列中,得到你想要的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 09:20:38