簡體   English   中英

Pandas一行pitvot表返回一個系列而不是數據框

[英]Pandas one row pitvot table returns a serie instead of data frame

取決於用戶輸入我們生成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

請注意,pandas 0.18具有pd.Series.to_frame方法 所以,你可以使用

 df\
    .pivot_table(
         index=[], 
         columns=["attr1",'attr2'], 
         values=['metric1','metric2'])\
    .to_frame()

那是你要的嗎?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM