使用pandas处理txt表格新增百分比计算列及高效方案求助
Pandas 文本数据处理及百分比计算修正方案
现有代码问题梳理
- 逐行读取阶段已经完成数据类型转换,后续多余的字符串操作会对数值类型调用
str方法直接报错 - 分组后百分比计算逻辑错误,
pd.Series.pct_change无法直接实现同分组多记录的增长率计算
修正后可运行代码
import pandas as pd import numpy as np dl = [] with open('sampledata.txt') as f: for line in f: parts = line.split() # 处理无括号的行,插入默认0 if not parts[2].endswith(')'): parts.insert(3, '($0)') # 合并col5的多空格内容 if len(parts) > 4: temp = ' '.join(parts[4:]) parts = parts[:4] + [temp] # 统一做类型转换 parts[1] = int(parts[1]) parts[2] = float(parts[2].replace(',', '')) parts[3] = float(parts[3].strip('($)')) dl.append(parts) headers = ['col1', 'col2', 'col3', 'col4', 'col5'] df = pd.DataFrame(dl, columns=headers) # 自定义百分比计算逻辑:分组内最后一条col2和第一条col2的增长率 def calc_pct(x): if len(x) < 2: return 0 return (x.iloc[-1] - x.iloc[0]) / x.iloc[0] # 分组聚合 df = df.groupby(['col1', 'col5'], as_index=False).agg( col2=('col2', 'sum'), col3=('col3', 'sum'), col4=('col4', 'sum'), col6=('col2', calc_pct) ) # 格式化百分比输出 df['col6'] = df['col6'].apply(lambda x: f"{round(x*100, 2)}%" if x !=0 else "0%") # 按col2降序排序 df = df.sort_values(by='col2', ascending=False).reset_index(drop=True) # 调整列顺序匹配预期 df = df[['col1', 'col2', 'col3', 'col4', 'col5', 'col6']] print(df)
运行输出
col1 col2 col3 col4 col5 col6 0 echo 13 2.885990e+05 226.01 ACS34S1 60.0% 1 romeo 12 9.800000e+02 0.00 ASDS SSSS SDSD 0% 2 charlie 11 2.523645e+08 742.51 DGAS-CAS 900.0% 3 falcon 8 9.313400e+00 0.00 DSS2SFS3 66.67% 4 lima 6 4.500181e+01 38.90 FGF5GGD-DDD 0% 5 bravo 3 5.000000e+05 0.00 ACDEF 0% 6 delta 2 1.100000e+01 10.00 SWSDSASS-CCSSW 0% 7 alpha 1 5.400010e+03 0.00 ABC DSW2S 0%
内容的提问来源于stack exchange,提问作者rbutrnz
相关产品推荐
相关产品推荐

