如何将Pandas DataFrame按国家分组统计买卖值并转换为目标格式
实现方案
你可以直接使用Pandas的pivot_table方法完成结构转换,同时完成分组聚合和行列重塑,完整可运行代码如下:
首先导入依赖包、构造原始数据集:
import pandas as pd from decimal import Decimal # 构造原始数据并指定列名 a = [('uk', 'Balaji B',Decimal('48998'), Decimal('41843')),('uk', 'Balaji B',Decimal('48998'), Decimal('41843')),('uk', 'Balaji B',Decimal('48998'), Decimal('41843')),('uk', 'Balaji B',Decimal('48998'), Decimal('41843')),('uk', 'Balaji B',Decimal('48998'), Decimal('41843')),('uk', 'Balaji B',Decimal('48998'), Decimal('41843')),('uk', 'Balaji B',Decimal('48998'), Decimal('41843')),('india', 'Balaji B',Decimal('48998'), Decimal('41843')),('india', 'Balaji B',Decimal('48998'), Decimal('41843')),('india', 'Balaji B',Decimal('48998'), Decimal('41843')),('india', 'Balaji B',Decimal('48998'), Decimal('41843')),('usa', 'Balaji B',Decimal('48998'), Decimal('41843')),('usa', 'Balaji B',Decimal('48998'), Decimal('41843'))] df = pd.DataFrame(a, columns=['国家', '用户名', 'sell', 'buy'])
执行结构转换:
# 按用户名聚合不同国家的sell、buy值,生成目标结构 res_df = df.pivot_table( index='用户名', # 保留用户名作为行维度 columns='国家', # 国家作为列维度 values=['sell', 'buy'], # 要聚合的指标列 aggfunc='sum' # 聚合规则,可按需替换为mean、count等 ) # 合并多级列名为「国家_指标」格式 res_df.columns = [f'{col[1]}_{col[0]}' for col in res_df.columns] # 重置索引,将用户名恢复为普通列 res_df = res_df.reset_index()
如果不需要保留用户名列作为行维度,直接调整index参数为index=None即可。
内容的提问来源于stack exchange,提问作者conol
相关产品推荐
相关产品推荐

