2016-07-07 3 views
2

팬더 데이터 프레임 행에서 값을 찾고 다음 행이 일치하는 경우 새 열 강조 표시를 만듭니다. 다음 그래서 예를 들면 :데이터 프레임 행의 값 찾기 - 다음 행 일치를 강조 표시하는 새 열 만들기

rng = pd.DataFrame({'test_1': ['A', 'A','A', 'A', 'B','B', 'A' , 'A', 'A', 'A','A' , 'A', 'A', 'A',]}, index = pd.date_range('4/2/2014', periods=14, freq='BH')) 
reg 

행 == B에 2014년 4월 2일 13시 0분 0초 및 2014년 4월 2일 14시 0분 0초을 너무 일치가 :

test_1 
2014-04-02 09:00:00 A 
2014-04-02 10:00:00 A 
2014-04-02 11:00:00 A 
2014-04-02 12:00:00 A 
2014-04-02 13:00:00 B 
2014-04-02 14:00:00 B 
2014-04-02 15:00:00 A 
2014-04-02 16:00:00 A 
2014-04-03 09:00:00 A 
2014-04-03 10:00:00 A 
2014-04-03 11:00:00 C 
2014-04-03 12:00:00 A 
2014-04-03 13:00:00 D 
2014-04-03 14:00:00 D 

B_Matches 
    2014-04-02 09:00:00 0 
    2014-04-02 10:00:00 0 
    2014-04-02 11:00:00 0 
    2014-04-02 12:00:00 0 
    2014-04-02 13:00:00 0 
    2014-04-02 14:00:00 1 
    2014-04-02 15:00:00 0 
    2014-04-02 16:00:00 0 
    2014-04-03 09:00:00 0 
    2014-04-03 10:00:00 0 
    2014-04-03 11:00:00 0 
    2014-04-03 12:00:00 0 
    2014-04-03 13:00:00 0 
    2014-04-03 14:00:00 0 

난 후 다른 열 등 C, D에 대해 동일하게 수행 될 것이다 : 다음

그래서 새로운 칼럼이되어야한다. 나는 기본적으로 특정 조건이 보이고 다음 기간이 동일하고 다음 열의주기가 얼마나 자주 나타나는지이 열에 대해 count()를 수행하는 시간을 찾으려고합니다. 또한 다른 방법을 제시하십시오.

도움 주셔서 감사합니다.

답변

2

당신은 어떤 행이 조건을 충족하는지 여부를 귀하의 값을 취하고 반환하는 FUNC를 정의 할 수 있습니다, 이것은 당신이 통과 값에 대해 작동합니다, 부울 시리즈는 다음 int에 캐스팅은 그래서 각각 10TrueFalse 변환 :

In [220]: 
def func(val): 
    return ((rng['test_1'] == val) & (rng['test_1'].shift() == val)).astype(int) 
​ 
func('B') 

Out[220]: 
2014-04-02 09:00:00 0 
2014-04-02 10:00:00 0 
2014-04-02 11:00:00 0 
2014-04-02 12:00:00 0 
2014-04-02 13:00:00 0 
2014-04-02 14:00:00 1 
2014-04-02 15:00:00 0 
2014-04-02 16:00:00 0 
2014-04-03 09:00:00 0 
2014-04-03 10:00:00 0 
2014-04-03 11:00:00 0 
2014-04-03 12:00:00 0 
2014-04-03 13:00:00 0 
2014-04-03 14:00:00 0 
Freq: BH, Name: test_1, dtype: int32 

In [222]: 
func('A') 

Out[222]: 
2014-04-02 09:00:00 0 
2014-04-02 10:00:00 1 
2014-04-02 11:00:00 1 
2014-04-02 12:00:00 1 
2014-04-02 13:00:00 0 
2014-04-02 14:00:00 0 
2014-04-02 15:00:00 0 
2014-04-02 16:00:00 1 
2014-04-03 09:00:00 1 
2014-04-03 10:00:00 1 
2014-04-03 11:00:00 1 
2014-04-03 12:00:00 1 
2014-04-03 13:00:00 1 
2014-04-03 14:00:00 1 
Freq: BH, Name: test_1, dtype: int32 
+0

완벽한 덕분에 다시 EdChum. 다른 df 컬럼에서 이것을 사용하여 약간 'def func_match (df_in, val) : return ((df_in == val) & (df_in.shift() == val)). – ade1e

관련 문제