我有这个清单:
key,value
1,"1"
1,"2"
1,"3"
2,"1"
2,"2"
2,"3"
2,"4"
2,"5"
3,"1"
3,"2"
3,"3"
如何基于具有相同的密钥来合并值,使其成为:
key,value
1,"1,2,3"
2,"1,2,3,4,5"
3,"1,2,3"
我正在使用Python csv: merge rows with same field中的代码,但结果是:
1,"1",1,"2",1,"3"
3,"1",3,"2",3,"3"
2,"1",2,"2",2,"3",2,"4",2,"5"
答案 0 :(得分:1)
IIUC,如果你想看到这种情况的可能性,如果没有商业案例,可以使用具有密钥值的pandas dataframe
d来做什么:
d.groupby(['key'])['value'].apply(lambda x: ','.join(x)).reset_index()
key value
0 1 1,2,3
1 2 1,2,3,4,5
2 3 1,2,3
答案 1 :(得分:0)
你可以试试这个:
s = """
key,value
1,"1"
1,"2"
1,"3"
2,"1"
2,"2"
2,"3"
2,"4"
2,"5"
3,"1"
3,"2"
3,"3"
"""
import itertools
new_data = [i.split(',') for i in s.split('\n')][2:-1]
new_data = [[int(a), b[1:-1]] for a, b in new_data]
final_data = [(a, ','.join([d for c, d in list(b)])) for a, b in itertools.groupby(new_data, key=lambda x:x[0])]
输出:
[(1, '1,2,3'), (2, '1,2,3,4,5'), (3, '1,2,3')]
答案 2 :(得分:0)
您也可以尝试使用defaultdict
:
In [15]: li = [(1, '1'), (1, '2'), (1, '3'), (2, '1'), (2, '2'), (2, '3'), (2, '4'), (2, '5'), (3, '1'), (3, '2'), (3, '3')]
In [16]: dic = defaultdict(list)
In [17]: for key, value in li:
...: dic[key].append(value)
In [18]: dic
Out[18]:
defaultdict(list,
{1: ['1', '2', '3'],
2: ['1', '2', '3', '4', '5'],
3: ['1', '2', '3']})