2016-06-22 1 views
3

을 사용하여 이전 색인에서 데이터를 가져 오려면 Letter 열 중 하나의 값이 동일해야합니다.적용 함수 내에서 shift() 함수를 사용하여 Pandas 데이터 프레임의 행을 비교하십시오.

import pandas as pd 
df = pd.DataFrame(data=[['A', 'one'], 
         ['A', 'two'], 
         ['B', 'three'], 
         ['B', 'four'], 
         ['C', 'five']], 
        columns=['Letter', 'value']) 

df['Previous Value'] = df.apply(lambda x : x['value'] if x['Letter'].shift(1) == x['Letter'] else "", axis=1) 
print df 

나는 오류를 얻고있다 :

AttributeError: ("'str' object has no attribute 'shift'", u'occurred at index 0') 

원하는 출력 :

Letter value Previous Value 
0  A one    
1  A two   one 
2  B three    
3  B four   three 
4  C five    
shift를 사용하여 현재 행이 이전 행과 일치하는 당신의 상태에

답변

4

사용 where :

In [11]: 
df = pd.DataFrame(data=[['A', 'one'], 
         ['A', 'two'], 
         ['B', 'three'], 
         ['B', 'four'], 
         ['C', 'five']], 
        columns=['Letter', 'value']) 
​ 
df['Previous Value'] = df['value'].shift().where(df['Letter'].shift() == df['Letter'], '') 
df 
​ 
Out[11]: 
    Letter value Previous Value 
0  A one    
1  A two   one 
2  B three    
3  B four   three 
4  C five    
1

Series 대신 주어진 행의 주어진 열 값에 .shift()를 적용하려고합니다. groupby를 사용하여이 작업을 수행합니다.

In [6]: df['Previous letter'] = df.groupby('Letter').value.shift() 

In [7]: df 
Out[7]: 
    Letter value Previous letter 
0  A one    NaN 
1  A two    one 
2  B three    NaN 
3  B four   three 
4  C five    NaN 
관련 문제