2017-10-07 384 views
2

我處於一種奇怪的狀況。我之前已經解決了我的編程問題,但是我正在回顧並嘗試使用熊貓來實現它。我認爲這將是一個使用熊貓練習的好地方。如何在pandas df中獲取不同的行並將重複項合併到列中?

我在查詢數據庫,做一些計算,然後用PyQt QTableWidget將結果顯示到GUI上。

計算之後的示例表看起來是這樣的:

test_list = [["a", "b", "c", "d"], 
      ["1", "3", "5", "7"], 
      ["1", "4", "5", "7"], 
      ["2", "3", "6", "8"], 
      ["2", "4", "6", "9"]] 

我想這樣做之前,我展示它是什麼:獲得基於列的「a」重複行,「C」和「 d「,並將從列」b「中刪除的元素合併回列。我想要的結果如下所示:

['a', 'b', 'c', 'd'] 
['1', '3, 4', '5', '7'] 
['2', '3', '6', '8'] 
['2', '4', '6', '9'] 

請注意列「b」,「3,4」在列中的表示方式。

這裏是我如何與列表和字典做了它最初:

def mergeDistinct(my_list): 
    new_list_dict = {} 

    for elem in my_list[1:]: 
     key_str = (elem[0], elem[2], elem[3]) 
     if key_str in new_list_dict.keys(): 
      new_list_dict[key_str][1] += ", " + elem[1] 
     else: 
      new_list_dict[key_str] = elem[::] 
      new_list_dict[key_str][1] = elem[1] 

    ret_list = new_list_dict.values() 

    return [my_list[0]] + ret_list 

在所有行的我和循環使用字典來跟蹤什麼樣的價值觀的不同組合,我迄今所看到的。我覺得它有點笨重,我正試圖在熊貓圖書館工作。我覺得它應該是可能的,但也許我不知道正確的術語,以谷歌瞭解如何做到這一點。

這是我到目前爲止有:

df = pd.DataFrame(data=test_list[1:], columns=test_list[0]) 

def mergeDistinctPandas(my_df): 
     #I feel like this is close but I don't know how to continue 
     df = my_df.set_index(['a', 'b', 'c', 'd']).groupby(level=['a', 'c', 'd']) 
     # for elem in df: 
      # print(elem) 
     # new_df = pd.DataFrame() 
     # for elem in df: 
      # merged = pd.concat([elem[1] for i, row in elem[1].iterrows()]) #.to_frame() 
      # merged.index = ['duplicate_{}'.format(i) for i in range(len(merged))] 
      # new_df = pd.concat([new_df, merged], axis=1) 

     return False 

如果我打印出什麼我迄今我看行分開,我應該能夠將它們合併回去,留下「B」分離,但我看不出如何去做。

如果熊貓不適合這個問題,那也沒關係,我只是試圖去解決它。 感謝您的幫助。

這裏是我已經發現了一些相關的問題: How to "select distinct" across multiple data frame columns in pandas?How do I merge duplicate rows into one on a DataFrame when they have different values

回答

4
df.groupby([‘a’, ‘c’, ‘d’]).b.apply(‘, ‘.join) \ 
    .reset_index()[df.columns] 
+0

LOL可愛逗號:-) – Wen

相關問題