2013-01-02 4 views
1

New to pandas python.팬더 데이터 프레임의 두 열 - Concat in Python

나는 두개의 칼럼이있는 데이터 프레임 (df)을 가지고있다. 이 열을 두 열의 고유 항목 목록으로 바꾸고 싶습니다.

내 첫 번째 시도는 다음을 수행하는 것이 었습니다 :

cusips = pd.concat (DF [ '짧은'] 안양, [ '긴']).

이 오류를 반환했습니다 : 두 개 이상의 요소가있는 배열의 진리 값이 모호합니다. a.any() 또는 a.all()을 사용하십시오.

나는 몇 개의 게시물을 읽었지만, 왜 이런 일이 일어나는지에 대해 여전히 문제가 있습니다. 내가 여기서 무엇을 놓치고 있니?

또한 열이나 데이터 프레임에서 고유 항목을 선택하는 가장 효율적인 방법은 무엇입니까? 하나의 함수로 호출 할 수 있습니까? 목록 또는 새로운, 1-coulmn 데이터 프레임을 만들려는 경우 함수가 달라 집니까?

감사합니다.

답변

1

Hayden의 대답에 덧붙여 동일한 결과에 대해 set() 메서드를 사용할 수도 있습니다. 성능은 그 고려의 경우 약간 더 :

In [28]: %timeit set(np.append(df[0],df[1])) 
100000 loops, best of 3: 19.6 us per loop 

In [29]: %timeit np.append(df[0].unique(), df[1].unique()) 
10000 loops, best of 3: 55 us per loop 
+0

세트는 확실히 여기에 갈 수있는 방법입니다, 나는 (정렬 된) numpy.unique''보다 빠른 화가입니다! –

+0

빠른 후속 조치. Set는 df [0]과 df [1]의 전부 또는 유일한 것을 취합니까? 나는 유일한 것으로 추측하고있다. 이것에 대한 의견 : 이것은 다음 오류를 반환했습니다 : 하나 이상의 요소가있는 배열의 진리 값이 모호합니다. a.any() 또는 a.all()을 사용하십시오. 어떻게해야합니까? – user1911092

+0

시리즈를 []로 묶으십시오. cusips = pd.concat ([df [ 'long'], df [ 'short']]) – Zelazny7

1

열의 고유 한 값을 얻으려면 unique 시리즈 방법을 사용할 수 있습니다. 의 숫자가있는 배열을 반환합니다 (빠르다!).

df.long.unique() 
# returns numpy array of unique values 

그런 다음 사용할 수 numpy.append :

np.append(df.long.unique(), df.short.unique()) 

참고 :이 그냥 함께이 개 독특한 결과를 추가 그래서 그 자체가 고유하지 않습니다!

.

import pandas as pd 
import numpy as np 
df = pd.DataFrame([[1, 2], [1, 4]], columns=['long','short']) 

In [4]: df 
Out[4]: 
    long short 
0  1  2 
1  1  4 

In [5]: df.long.unique() 
Out[5]: array([1]) 

In [6]: df.short.unique() 
Out[6]: array([2, 4]) 

그리고 appending the resulting two arrays :

In [7]: np.append(df.long.unique(), df.short.unique()) 
Out[7]: array([1, 2, 4]) 

Zalazny7의 set @ 사용합니다 (한 번만 배열을 통해 실행 때문에) 다소 upsettingly 훨씬 빠르게 그것의 여기

은 (사소한) 예제 np.unique (결과 배열을 정렬합니다!)보다 빠릅니다.

관련 문제