使用Python Pandas实现数据分组转换:长表转宽表
把长格式数据转成宽格式的Python代码
原始长格式数据:
A 12 B 15 C 9 C 12 B 15 A 24 B 9 C 3 A 9
目标宽格式输出:
A B C 12 15 9 24 15 12 9 9 3
方法一:用pandas快速实现
pandas是处理表格数据的常用工具,几行代码就能完成转换:
import pandas as pd # 模拟原始数据(实际可替换成读取文件,比如用pd.read_csv) raw_data = """A 12 B 15 C 9 C 12 B 15 A 24 B 9 C 3 A 9""" # 拆分每行数据并转为DataFrame lines = [line.strip().split() for line in raw_data.splitlines()] df = pd.DataFrame(lines, columns=['类别', '数值']) df['数值'] = df['数值'].astype(int) # 给每个类别的条目添加分组序号,用来对应宽格式的行 df['组号'] = df.groupby('类别').cumcount() # 转换为宽格式并调整输出样式 wide_df = df.pivot(index='组号', columns='类别', values='数值').reset_index(drop=True) # 指定列顺序,打印时去掉索引 print(wide_df[['A', 'B', 'C']].to_string(index=False))
方法二:纯Python实现(无需第三方库)
如果不想依赖pandas,用原生Python也能完成:
raw_data = """A 12 B 15 C 9 C 12 B 15 A 24 B 9 C 3 A 9""" # 按类别分组存储数值 category_values = {} for line in raw_data.splitlines(): key, val = line.strip().split() val = int(val) if key not in category_values: category_values[key] = [] category_values[key].append(val) # 定义输出的列顺序 columns = ['A', 'B', 'C'] # 获取行数(每个类别下的条目数一致) row_num = len(category_values[columns[0]]) # 打印表头 print('\t'.join(columns)) # 逐行打印对应位置的数值 for i in range(row_num): row_data = [str(category_values[key][i]) for key in columns] print('\t'.join(row_data))
内容的提问来源于stack exchange,提问作者user2554212
相关产品推荐
相关产品推荐

