我想重塑一个 Pandas 数据框,使其基于一些原始列的组合拥有一个新的多索引,同时取消一些行的堆叠。但我不知道即使在阅读了 stacking and pivoting 的教程之后。
基本上,我有:
# fruit year, variable, value
fruits = \
[('apples' , 2014, 'weight', 1.4),
('apples' , 2015, 'weight', 1.5),
('bananas', 2014, 'yield', 0.5),
('bananas', 2015, 'yield', 0.6),
('bananas', 2014, 'weight', 1.4)]
df = DataFrame(fruits)
结果应该是:
multi-index
/----------\
fruit year weight yield
apples 2014 1.4 NaN
2015 1.5 NaN
bananas 2014 1.4 0.5
2015 NaN 0.6
有什么建议么?谢谢。
最佳答案
原始数据帧有一列值为 weight
或 yield
。我们希望这些成为
列名(又名“列级值”)。set_index
可以将列值移动到索引级别值。unstack
可以将索引级别的值移动到列级别的值中。
将两者放在一起,我们得到:
fruits = \
[('apples' , 2014, 'weight', 1.4),
('apples' , 2015, 'weight', 1.5),
('bananas', 2014, 'yield', 0.5),
('bananas', 2015, 'yield', 0.6),
('bananas', 2014, 'weight', 1.4)]
df = pd.DataFrame(fruits, columns='fruit year col val'.split())
df = df.set_index(['fruit', 'year', 'col'])
df = df.unstack(level='col')
df.columns = df.columns.droplevel(0)
这产生
col weight yield
fruit year
apples 2014 1.4 NaN
2015 1.5 NaN
bananas 2014 1.4 0.5
2015 NaN 0.6
另一种选择是使用
pivot_table
:df = df.pivot_table(index=['fruit', 'year'], columns='col')
df.columns = df.columns.droplevel(0)
关于python - Pandas 重塑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28031254/