2014-01-28 97 views
4

在熊貓中,我試圖手動編碼卡方檢驗。我在下面的數據框中比較row 0row 1熊貓:行和列總和的外積

data 
     2  3  5  10  30 
0  3  0  6  5  0 
1 33324 15833 58305 54402 38920 

爲此,我需要計算每個單元格的預期單元格數爲:cell(i,j) = rowSum(i)*colSum(j)/sumAll。在R,我可以簡單地通過採取outer()產品做到這一點:

Exp_counts <- outer(rowSums(data), colSums(data), "*")/sum(data) # Expected cell counts 

我使用numpy的公司外產品功能模仿上述R代碼的結果:

import numpy as np 
pd.DataFrame(np.outer(data.sum(axis=1),data.sum(axis=0))/ (data.sum().sum()), index=data.index, columns=data.columns.values) 
     2  3  5  10  30 
0  2  1  4  3  2 
1 33324 15831 58306 54403 38917 

它是實現這一可能的有熊貓的功能?

+1

又怎會不工作? (data.sum(axis = 0),data.sum(axis = 1))/(data.sum()。sum())'然後'now_a_df = pd.DataFrame(not_yet_df) ' 另外,如果你想用'pd.np.outer(..)'' – mkln

+0

,你可以從pandas調用'outer'函數而不需要導入numpy。是的,但是(但是我意識到軸求和時需要顛倒) )。我重新提出了我的問題,包括numpy解決方案。我正在尋找一種方法來實現熊貓功能。 – Rhubarb

+0

爲什麼你需要一個熊貓功能呢? – mkln

回答

1

僅使用內置方法熊貓的完整解決方案:

def outer_product(row): 
    numerator = df.sum(1).mul(row.sum(0)) 
    denominator = df.sum(0).sum(0) 
    return (numerator.floordiv(denominator)) 

df.apply(outer_product) 

Image

時序:100萬行DF的。

enter image description here