如何基于密钥合并csv字段

时间:2017-10-28 16:14:27

标签: python csv

我有这个清单:

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"

3 个答案:

答案 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']})