我处于一种奇怪的状况。我之前已经解决了我的编程问题,但是我正在回顾并尝试使用熊猫来实现它。我认为这将是一个使用熊猫练习的好地方。如何在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