我想重塑一个 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

有什么建议么?谢谢。

最佳答案

原始数据帧有一列值为 weightyield 。我们希望这些成为
列名(又名“列级值”)。
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/

10-13 22:20