2017-12-28 24 views
0

결합 된 열을 행의 모든 ​​값의 concat으로 넣어야합니다.팬더, 여러 열을 배열 열로 결합하는 방법

출처 :

pd.DataFrame(data={ 
    'a' : [1,2,3], 
    'b' : [2,3,4] 
}) 

대상 :

pd.DataFrame(data={ 
    'a' : [1,2,3], 
    'b' : [2,3,4], 
    'combine' : [[1,2],[2,3],[3,4]] 
}) 

현재 솔루션 :

test['combine'] = test[['a','b']].apply(lambda x: pd.Series([x.values]), axis=1) 

문제 : 실제로 많은 열, 그것을 실행하는 데 너무 오래 걸리는 것 같다있다. 더 좋은 방법인가요? 단일 컬럼으로 목록의 열을 추가하려면

+1

df [ 'combine'] = df.values.tolist()' –

+0

피할 수있는 곳에서는 '적용'을 사용하지 마십시오. –

+0

마지막으로주의해야 할 것은 이러한 열은 본질적으로 쓸모 없다는 것입니다. 단순히 표시 이외의 다른 작업을 수행하려는 경우이 형식으로 열을 보관하지 마십시오. –

답변

0
df 

    a b 
0 1 2 
1 2 3 
2 3 4 

, 당신은 .values 속성을 호출 중첩 된 목록으로 변환해야하고, 그것을 다시 지정 -

df['combine'] = df.values.tolist() 

또는,

df['combine'] = df[['a', 'b']].values.tolist() 
df 
    a b combine 
0 1 2 [1, 2] 
1 2 3 [2, 3] 
2 3 4 [3, 4] 

참고 만 할당하기 노트의 몇

df['combine'] = df[['a', 'b']].values 

ValueError: Wrong number of items passed 2, placement implies 1 

- - .values 결과는 직접적으로 바람직하지 않은 결과로 이어지는 pandas특별한 경우로, NumPy와 배열을 작동하지 않습니다

  • 은하지 않으려 고 사용 apply/transform 가능한 한 많이. 루프의 적용을 숨기기위한 편리한 함수 일 뿐이며 성능/벡터화 이점을 제공하지 않는 느린 속도입니다.

  • '객체의 열을 유지하면 팬더만큼 성능이 향상되지 않습니다. 목표는 데이터를 표시하고 피하기 위해 노력하는 것입니다.