如何从字符串列表提取数字并在DataFrame生成按税率汇总的列
提取税种税率并生成汇总DataFrame方案
1. 需求说明
现有从DataFrame中提取的字符串列表:
['CGST- INPUT 9% MAHARASHTRA',
'SGST-INPUT 9% MAHARASHTRA',
'CGST INPUT @6% MAHARASHTRA',
'SGST INPUT @6% MAHARASHTRA',
'CGST- INPUT 2.50% MAHARASHTRA',
'SGST-INPUT 2.50% MAHARASHTRA',
'TDS ON OFFICE RENT',
'TDS ON CONTRACTOR',
'TDS ON CONSULTANTS',
'TDS ON OFFICE RENT (COMPANY)',
'TDS ON CONSULTANY FEE']
需完成以下操作:
- 从字符串中提取数字作为税率(Rate)
- 生成包含
Rate、CGST、SGST、TDS列的DataFrame - 按税率汇总对应税种的数值,最终输出格式示例:
| Rate | CGST | SGST | TDS |
|---|---|---|---|
| 9 | XX | XX | XX |
| 6 | XX | XX | XX |
| 2.50 | XX | XX | XX |
2. 代码实现
使用Python的pandas库结合正则表达式完成处理,代码如下:
import pandas as pd import re # 原始字符串列表 col_list = [ 'CGST- INPUT 9% MAHARASHTRA', 'SGST-INPUT 9% MAHARASHTRA', 'CGST INPUT @6% MAHARASHTRA', 'SGST INPUT @6% MAHARASHTRA', 'CGST- INPUT 2.50% MAHARASHTRA', 'SGST-INPUT 2.50% MAHARASHTRA', 'TDS ON OFFICE RENT', 'TDS ON CONTRACTOR', 'TDS ON CONSULTANTS', 'TDS ON OFFICE RENT (COMPANY)', 'TDS ON CONSULTANY FEE' ] processed_data = [] for col in col_list: # 提取税率:匹配整数或小数格式的数字 rate_match = re.search(r'(\d+\.?\d*)%?', col) rate = rate_match.group(1) if rate_match else 'N/A' # 标记对应税种 if 'CGST' in col: processed_data.append({'Rate': rate, 'CGST': 1, 'SGST': 0, 'TDS': 0}) elif 'SGST' in col: processed_data.append({'Rate': rate, 'CGST': 0, 'SGST': 1, 'TDS': 0}) elif 'TDS' in col: processed_data.append({'Rate': rate, 'CGST': 0, 'SGST': 0, 'TDS': 1}) # 转换为DataFrame并按税率汇总 df = pd.DataFrame(processed_data) summary_df = df.groupby('Rate').sum().reset_index() # 调整列顺序 summary_df = summary_df[['Rate', 'CGST', 'SGST', 'TDS']] print(summary_df)
3. 代码说明
- 税率提取:通过正则表达式
r'(\d+\.?\d*)%?'匹配字符串中的整数或小数,兼容带%符号的格式;TDS类无税率的标记为N/A - 税种标记:通过字符串关键词判断税种,为对应列赋值1,其余列赋值0
- 分组汇总:按
Rate分组后求和,得到各税率下对应税种的汇总数量(若需汇总金额,只需将初始赋值替换为对应金额即可)
内容的提问来源于stack exchange,提问作者Paras
相关产品推荐
相关产品推荐

