堆叠熊猫DataFrame
时,返回Series
。通常在堆叠DataFrame
之后,我将它转换回DataFrame
。但是,来自堆叠数据的默认名称使得重命名这些列有点难以理解。我正在寻找的是一种更容易/内置的方式,可以在堆叠后为列提供明智的名称。堆叠熊猫时设置列名DataFrame
例如,以下DataFrame
:
In [64]: df = pd.DataFrame({'id':[1,2,3],
...: 'date':['2015-09-31']*3,
...: 'value':[100, 95, 42],
...: 'value2':[200, 57, 27]}).set_index(['id','date'])
In [65]: df
Out[65]:
value value2
id date
1 2015-09-31 100 200
2 2015-09-31 95 57
3 2015-09-31 42 27
我叠,并将其转换回DataFrame
像这样:
In [68]: df.stack().reset_index()
Out[68]:
id date level_2 0
0 1 2015-09-31 value 100
1 1 2015-09-31 value2 200
2 2 2015-09-31 value 95
3 2 2015-09-31 value2 57
4 3 2015-09-31 value 42
5 3 2015-09-31 value2 27
所以为了适当命名这些列我需要做的像这样:
In [72]: stacked = df.stack()
In [73]: stacked
Out[73]:
id date
1 2015-09-31 value 100
value2 200
2 2015-09-31 value 95
value2 57
3 2015-09-31 value 42
value2 27
dtype: int64
In [74]: stacked.index.set_names('var_name', level=len(stacked.index.names)-1, inplace=True)
In [88]: stacked.reset_index().rename(columns={0:'value'})
Out[88]:
id date var_name value
0 1 2015-09-31 value 100
1 1 2015-09-31 value2 200
2 2 2015-09-31 value 95
3 2 2015-09-31 value2 57
4 3 2015-09-31 value 42
5 3 2015-09-31 value2 27
理想情况下,该解决方案将是这个样子:
df.stack(new_index_name='var_name', new_col_name='value')
但看docs它看起来并不像stack
采取任何这样的论点。熊猫有更容易/内置的方式来处理这个工作流程吗?
+1,但是阐述的一点点的将是理想的。也许资本会开始列名,因为我对这么多“价值”感到困惑。 – josh