2014-06-24 131 views
0

我一直在使用熊貓庫和交叉表來創建一個頻率數據框來處理數據。在下面的代碼中,我在csv中讀取,創建一個數據框,然後創建一個交叉表,這是一個頻率數據幀。然後,我得到一個橫截面的數據來提取列和下面的數據。如何在pandas crosstab數據框的列中顯示空白值?

def dataforgraphs(): 
    d = readcsv() 
    df = DataFrame(d) 
    d1=df[1] 
    d0=df[0] 
    d2=df[2] 
    d3=df[3] 
    d4=df[4] 


    cta = pd.crosstab(d0,[d2,d1,d3],rownames=['Date'],colnames=['RigStat','Prov','Obj'], margins=False) 

    ndfABA= ndf.xs('AB', level='Prov', axis=1) 
    ABrigs = ndfAB.xs(['BIT','GAS','OIL'],axis=1) 

現在,從這裏我沒有能夠拉動假設柱截面,其中將包括所有沒有標籤「位」,「氣」或「油空白值的問題」。在Excel數據透視表中,我可以通過在選擇要包含在數據透視表中的列時檢查(空白)框來執行此操作。我想在這裏做同樣的事情來得到所有那些空白的頻率計數。

有什麼建議嗎?

目前我得到以下輸出,其中只有三列指定和下面的頻率。

  OIL GAS BIT 
Date 
01-01-2007 1  6  3 
01-02-2007 2  4  4 
01-03-2007 1  6  3 
01-04-2007 5  6  4 
01-05-2007 1  7  3 
01-06-2007 6  6  6 
01-07-2007 1  8  3 
01-08-2007 5  6  6 
01-09-2007 1  6  3 
01-10-2007 1  7  3 

相反,我想獲得以下,其中包括未列爲石油,天然氣或BIT(或任何與此有關的上市)的所有空值的列。

  OIL GAS BIT "blank' 
Date 
01-01-2007 1  6  3  10 
01-02-2007 2  4  4  11 
01-03-2007 1  6  3  12 
01-04-2007 5  6  4  10 
01-05-2007 1  7  3  1 
01-06-2007 6  6  6  4 
01-07-2007 1  8  3  5 
01-08-2007 5  6  6  2 
01-09-2007 1  6  3  5 
01-10-2007 1  7  3  2 

數據進入大熊貓交叉表數據幀的結構如下所示:

Date   Obj Operator Type Address 
01-01-2007 OIL ABC  HZ 112 W Ave 
01-01-2007 GAS ABC  HZ 112 W Ave 
01-01-2007 GAS ABV  HZ 113 W Ave 
01-01-2007 BIT NCH  HZ 114 W Ave 
01-01-2007   CNR  HZ 115 W Ave 
01-02-2007 OIL CNRL  HZ 112 W Ave 
01-02-2007 OIL CNRL  HZ 112 W Ave 
01-02-2007 OIL CNRL  HZ 112 W Ave 
01-03-2007   CNRL  HZ 112 W Ave 
01-03-2007   CNRL  HZ 112 W Ave 

從這裏,大熊貓交叉表將創建一個頻率表,將通過捕捉油,氣,BIT的frquency日期,但我無法找到如何獲得空白值count.Notice如何有一些沒有列出Obj的列。這些值不是交叉表中我想查詢的值。

有什麼建議嗎?

+1

您能否提供一個具有真實數據的可重現示例並顯示預期的輸出? – joris

+0

那裏我做了一些編輯來清除。 – carevans88

+1

您提供一些重現問題的示例* data *會更容易(只是在同一結構中的一些隨機數據可以)。因爲它仍然不是很清楚。 – joris

回答

2

一種可能性是,以填補所需的字符串NaN值(如「空白」),因此他們也被計算:

In [23]: df 
Out[23]: 
     Date Obj Operator Type Address 
0 01-01-2007 OIL  ABC HZ 112 W Ave 
1 01-01-2007 GAS  ABC HZ 112 W Ave 
2 01-01-2007 GAS  ABV HZ 113 W Ave 
3 01-01-2007 BIT  NCH HZ 114 W Ave 
4 01-01-2007 NaN  CNR HZ 115 W Ave 
5 01-02-2007 OIL  CNRL HZ 112 W Ave 
6 01-02-2007 OIL  CNRL HZ 112 W Ave 
7 01-02-2007 OIL  CNRL HZ 112 W Ave 
8 01-03-2007 NaN  CNRL HZ 112 W Ave 
9 01-03-2007 NaN  CNRL HZ 112 W Ave 

In [24]: pd.crosstab(df['Date'], df['Obj']) 
Out[24]: 
Obj   BIT GAS OIL 
Date      
01-01-2007 1 2 1 
01-02-2007 0 0 3 

In [25]: df2 = df.fillna('blank') 

In [26]: pd.crosstab(df2['Date'], df2['Obj']) 
Out[26]: 
Obj   BIT GAS OIL blank 
Date        
01-01-2007 1 2 1  1 
01-02-2007 0 0 3  0 
01-03-2007 0 0 0  2 

什麼交叉實際上做的是剛剛通過行和列的值分組(成爲行和列索引),並計算其頻率。

相關問題