2016-06-17 3 views
-1

가정하자파이썬 목록에 두 개의 행을 결합하는 방법 I은 2D 목록이

a= [['a','b','c',1], 
    ['a','b','d',2], 
    ['a','e','d',3], 
    ['a','e','c',4]] 

I 행의 처음 두 요소가 동일한 경우, 네 번째 요소를 합산되도록리스트를 획득 할 상기 드롭 세 번째 요소를 조합하고 다음과 같이이 행을 결합하십시오.

b = [['a','b',3], 
    ['a','e',7]] 

가장 효율적인 방법은 무엇입니까?

답변

1

:

import pandas as pd 
df = pd.DataFrame(a) 
df.groupby([0, 1]).sum().reset_index().values.tolist() 

출력 :

df.groupby([0, 1]).sum().reset_index().values.tolist() 
Out[19]: [['a', 'b', 3L], ['a', 'e', 7L]] 
+0

@downvoter, 왜 downvote 설명 할 수 있습니까? – MaThMaX

2

목록이 이미 정렬 된 경우 itertools.groupby을 사용할 수 있습니다. 처음 두 요소로 그룹화하면 생성기 식을 사용하여 네 번째 요소를 합계하고 새 목록을 만들 수 있습니다. pandasgroupby을 사용

>>> from itertools import groupby 
>>> a= [['a','b','c',1], 
     ['a','b','d',2], 
     ['a','e','d',3], 
     ['a','e','c',4]] 
>>> [g[0] + [sum(i[3] for i in g[1])] for g in groupby(a, key = lambda i : i[:2])] 
[['a', 'b', 3], 
['a', 'e', 7]] 
0

당신은 그 목표를 달성하기 위해 팬더 GROUPBY 방법을 사용할 수 있습니다.

import pandas as pd 

a= [['a','b','c',1], 
    ['a','b','d',2], 
    ['a','e','d',3], 
    ['a','e','c',4]] 

df = pd.DataFrame(a) 
df_sum = df.groupby([0,1])[3].sum().reset_index() 
array_return = df_sum.values 
list_return = array_return.tolist() 
print(list_return) 

list_reuturn은 원하는 결과입니다.

0

관심이 있으시면. 다음은 원시 파이썬을 사용하여 구현 한 것입니다. 필자가 제공 한 데이터 세트에서만 테스트 해 보았습니다.

a= [['a','b','c',1], 
['a','b','d',2], 
['a','e','d',3], 
['a','e','c',4]] 

b_dict = {} 
for row in a: 
    key = (row[0], row[1]) 
    b_dict[key] = b_dict[key] + row[3] if key in b_dict else row[3] 
b = [[key[0], key[1], value] for key, value in b_dict.iteritems()] 
관련 문제