我處於一種奇怪的狀況。我之前已經解決了我的編程問題,但是我正在回顧並嘗試使用熊貓來實現它。我認爲這將是一個使用熊貓練習的好地方。如何在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
LOL可愛逗號:-) – Wen