取决于用户输入我们生成pandas数据透视表。有一种特殊情况,在列中只有一个属性。由于数据透视表而不是数据框,因此生成类型系列的数据对象,因此我必须以不同的方式访问它(IE。下面)。有没有办法,如何独立于列中的属性数得到相同的结果?
import pandas as pd
data = {'attr1': {0: 2, 1: 1, 2: 14}, 'attr2': {0: 0, 1: 1, 2: 2},'metric1': {0: 3834557.25999999998, 1: 13251194.440, 2: 2868778.53}, 'metric2': {0: 7.2, 1: 4.0, 2: 7.5}}
df = pd.DataFrame(data)
tab1 = df.pivot_table(index=[], columns=["attr1"], values=['metric1', 'metric2'])
if isinstance(tab1, pd.Series):
tab1 = pd.DataFrame(tab1).T
print tab1.index
print tab1.columns
print tab1
tab2 = df.pivot_table(index=[], columns=["attr1",'attr2'], values=['metric1','metric2'])
if isinstance(tab2, pd.Series):
tab2 = pd.DataFrame(tab2).T
print tab2.index
print tab2.columns
print tab2
答案 0 :(得分:3)
请注意,pandas 0.18有一个pd.Series.to_frame
method。所以,你可以使用
df\
.pivot_table(
index=[],
columns=["attr1",'attr2'],
values=['metric1','metric2'])\
.to_frame()
答案 1 :(得分:2)
是你想要的吗?
In [39]: df.pivot_table(index=[], columns=["attr1",'attr2'], values=['metric1','metric2']).reset_index()
Out[39]:
level_0 attr1 attr2 0
0 metric1 1 1 13251194.44
1 metric1 2 0 3834557.26
2 metric1 14 2 2868778.53
3 metric2 1 1 4.00
4 metric2 2 0 7.20
5 metric2 14 2 7.50