2014-07-17 4 views
0

팬더 DataFrame에서 연속 된 두 행의 차이를 찾고 싶다면 diff 함수를 호출하면됩니다.행간 교차 찾기

문자가 set s 인 행이 있습니다. 이제는 행렬 쌍으로 각 집합의 교차점을 계산합니다. 즉, diff을 사용하고 싶지만 대신 내 기능을 제공하십시오. 팬더에서 이것을 수행 할 수있는 방법이 있습니까?

예를 입력 :

100118231  1    set([])   
       2   set([142.136.6])  
       3   set([142.136.6])  
       4   set([])    
       5   set([])    
       6   set([108.0.239])  

원하는 출력 :

100118231  1    set([])    NaN 
       2   set([142.136.6]) set([]) 
       3   set([142.136.6]) {142.136.6} 
       4   set([])    set([]) 
       5   set([])    set([]) 
       6   set([108.0.239]) set([]) 

내가 shift를 사용하여 시도했지만, 그 이상의 모든 항목을 실행 오류

In [213]: type(tgr.head(1)) 
Out[213]: pandas.core.frame.DataFrame 

In [214]: tt=tgr.apply(lambda x: x['value'].intersection((x['value'].shift(-1)))) 

AttributeError: 'Series' object has no attribute 'intersection' 
+0

부수적으로 붙여 넣은 코드와 데이터는 실제로 사용할 수 없습니다. 다행스럽게도 이것은 쉬운 질문 이었지만 데이터 프레임을 재현해야한다면 귀찮게하지 않았을 것입니다. – U2EF1

+0

유용하지 않은 것은 무엇입니까? 나는 그것이 데이터의 구조를 시각화하는 훌륭한 일을했다고 생각했다. 이해가되지 않는다면 같은 실수를 두 번하고 싶지는 않습니다. – Mike

+0

명령 줄에 무언가를 붙여 넣기 만하면 데이터를 재구성 할 수 없으므로이 문제를 쉽게 재현 할 수 없습니다. [Here 's] (http://stackoverflow.com/questions/20109391/how-to-make-good-reproducible-pandas-examples) 좋은 가이드이지만, 데이터 프레임 세트를 얻으려면 좀 더 흥미로운 작업을해야합니다. – U2EF1

답변

1

&를 던졌습니다 , 람다 등을 사용할 필요가 없습니다.

> df = pd.DataFrame(['hi', set([142,136,6]), set([142, 137, 6]), set([0, 6])]).iloc[1:] 
> df & df.shift(1) 
       0 
1   NaN 
2 set([142, 6]) 
3  set([6])