簡體   English   中英

pandas.crosstab中缺少數據

[英]Missing data in pandas.crosstab

我正在制作一些帶有熊貓的交叉表:

a = np.array(['foo', 'foo', 'foo', 'bar', 'bar', 'foo', 'foo'], dtype=object)
b = np.array(['one', 'one', 'two', 'one', 'two', 'two', 'two'], dtype=object)
c = np.array(['dull', 'dull', 'dull', 'dull', 'dull', 'shiny', 'shiny'], dtype=object)

pd.crosstab(a, [b, c], rownames=['a'], colnames=['b', 'c'])

b     one   two       
c    dull  dull  shiny
a                     
bar     1     1      0
foo     2     1      2

但我真正想要的是以下內容:

b     one        two       
c    dull  shiny dull  shiny
a                     
bar     1     0    1      0
foo     2     0    1      2

我通過添加新列和設置級別作為新的MultiIndex找到了解決方法,但似乎很難......

有沒有辦法將MultiIndex傳遞給交叉表函數來預定義輸出列?

交叉表函數有一個名為dropna的參數,默認情況下設置為True。 此參數定義是否應顯示空列(例如一個閃亮列)。

我試着像這樣調用這個函數:

pd.crosstab(a, [b, c], rownames=['a'], colnames=['b', 'c'], dropna = False)

這就是我得到的:

b     one          two       
c    dull  shiny  dull  shiny
a                            
bar     1      0     1      0
foo     2      0     1      2

希望這仍然有用。

我認為沒有辦法做到這一點,並且crosstab調用pivot_table中的pivot_table ,這似乎也沒有提供。 我把它作為一個問題提出來了

一個hacky解決方法(可能與您已經使用的相同或不同......):

from itertools import product
ct = pd.crosstab(a, [b, c], rownames=['a'], colnames=['b', 'c'])
a_x_b = list(product(np.unique(b), np.unique(c)))
a_x_b = pd.MultiIndex.from_tuples(a_x_b)

In [15]: ct.reindex_axis(a_x_b, axis=1).fillna(0)
Out[15]:
      one          two
     dull  shiny  dull  shiny
a
bar     1      0     1      0
foo     2      0     1      2

如果product太慢,這里是一個簡單的實現

暫無
暫無

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

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