2016-12-14 76 views
0

我想在我的數據幀比較對兩列,並測試它們是否相等。下面是在R上的代碼:比較consequetive對用於跨數據幀的平等列在Python

colSums(df[,seq(1,ncol(df),2)]==df[,seq(2,ncol(df),2)]) 

如果我的數據是這樣的:

a b c d e f 
hi hi hi ho hi ho 
ho ho ho ho ho hi 

我的代碼將比較列與B,C與d等,檢查有多少行等於並按以下方式返還給我。數據幀IM工作的就有N×2N的尺寸。(列數甚至)

a c e 
2 1 0 

我無法複製在Python(原諒我的經驗不足)這個代碼 任何幫助將不勝感激! 感謝

回答

0

不是代碼最簡潔一點,但我認爲這是相當可讀,並根據需要將工作。

def compare_consecutive_cols(lst): 
    res = [0 for i in xrange(len(lst[0])/2)] 
    for i in xrange(len(lst)): 
     for j in xrange(0, len(lst[i]), 2): 
      if lst[i][j] == lst[i][j+1]: 
       res[j/2] += 1 
    return res 

功能compare_consecutive_cols()保持長度(N/2)返回的結果列表中,並穿過整個數據維持該列表。 (即,只要找到相同的一對就遞增一個值)它以逐行的方式遍歷數據並檢查一行中的每個連續對。

我與你所提供的輸入矩陣測試它,它似乎與以下列方式下面的輸入工作。 (A與您提供的矩陣相同)

A = [[1, 1, 1, 0, 1, 0], [0, 0, 0, 0, 0, 1]] 
print compare_consecutive_cols(A) 

有關示例用法,請參閱here

+0

我完全不熟悉編碼,所以請原諒我, 我運行上面的代碼並用我的數據框名稱替換'list' 如何查看結果? 另外我的數據幀有N×N列,以前沒有提及它的apoplogies。 – Aman

+0

@Aman我添加了一個示例用法,並更正了我的代碼中的一些錯誤。如果您的數據是以列表方式組織的(即類似於A),那麼它現在應該可以工作。 – ilim

+0

@Aman如果N可以是奇數則可能需要通過用**(j取代在第5行由if語句檢查表達略微更新此碼+ 1 ilim