如何在pandas DataFrame中实现多列转置为单列的格式转换
你需要先后结合melt(宽表转长表)和pivot(长表转目标宽表)两个方法实现转换,完整实现代码如下:
import pandas as pd # 原始数据构造代码 df = pd.DataFrame( {'Country': ["NL", "NL", "NL", "BE", "BE", "BE"], "Year": [2010, 2011, 2012, 2010, 2011, 2012], "Monkeys": [1, 4, 5, 2, 5, 4], "Giraffes": [40, 50, 60, 20, 30, 35], "Pigs": [10, 15, 20, 30, 35, 40] }) # 转换逻辑 # 第一步:将动物列转为行维度 df_melted = df.melt(id_vars=['Country', 'Year'], value_vars=['Monkeys', 'Giraffes', 'Pigs'], var_name='Animals', value_name='Count') # 第二步:将年份列转为表头 df_result = df_melted.pivot(index=['Animals', 'Country'], columns='Year', values='Count').reset_index() # 清理列名,去掉columns自带的名称前缀 df_result.columns.name = None # 如果需要和你示例的排序完全一致(NL在前BE在后),可以补充下面的排序代码 # df_result = df_result.sort_values('Country', ascending=False).reset_index(drop=True)
输出的df_result就是你需要的格式:
Animals Country 2010 2011 2012 0 Monkeys BE 2 5 4 1 Giraffes BE 20 30 35 2 Pigs BE 30 35 40 3 Monkeys NL 1 4 5 4 Giraffes NL 40 50 60 5 Pigs NL 10 15 20
内容的提问来源于stack exchange,提问作者brokkoo
相关产品推荐
相关产品推荐

