문서화 문자열은 how
문자열로하라고하지만 사실 그것은 또한 호출 할 수 있습니다.
'alarm1'열이 부울 값인 경우 how=any
(또는 how=np.any
)을 사용할 수 있습니다. any
은 논리적으로 각 시간 빈의 값을 or
으로하므로 빈의 값이 True이면 다운 샘플링 된 시리즈의 값은 True가됩니다.
다음은 예입니다.
먼저 임의의 시드를 설정하고 일련의 부울 값을 만듭니다.
In [101]: np.random.seed(123456)
In [102]: rng = pd.date_range('1/1/2011', periods=25, freq='1min')
In [103]: ts = pd.Series(np.random.rand(len(rng)) > 0.85, index=rng)
In [104]: ts
Out[104]:
2011-01-01 00:00:00 False
2011-01-01 00:01:00 True
2011-01-01 00:02:00 False
2011-01-01 00:03:00 True
2011-01-01 00:04:00 False
2011-01-01 00:05:00 False
2011-01-01 00:06:00 False
2011-01-01 00:07:00 False
2011-01-01 00:08:00 False
2011-01-01 00:09:00 False
2011-01-01 00:10:00 False
2011-01-01 00:11:00 False
2011-01-01 00:12:00 False
2011-01-01 00:13:00 True
2011-01-01 00:14:00 False
2011-01-01 00:15:00 False
2011-01-01 00:16:00 False
2011-01-01 00:17:00 False
2011-01-01 00:18:00 False
2011-01-01 00:19:00 False
2011-01-01 00:20:00 True
2011-01-01 00:21:00 False
2011-01-01 00:22:00 False
2011-01-01 00:23:00 False
2011-01-01 00:24:00 False
Freq: T, dtype: bool
5 분 주파수로 변환하려면 resample
을 사용하십시오. 논리적으로 how=np.any
을 사용하여 or
시간대의 값을 사용하십시오.
In [105]: ds = ts.resample('5min', how=np.any)
In [106]: ds
Out[106]:
2011-01-01 00:00:00 True
2011-01-01 00:05:00 False
2011-01-01 00:10:00 True
2011-01-01 00:15:00 False
2011-01-01 00:20:00 True
Freq: 5T, dtype: bool
또한 때마다 빈 당신에게 경보의 수를 줄 것이다 값을 요약 할 수
:
In [107]: ts.resample('5min', how=sum)
Out[107]:
2011-01-01 00:00:00 2
2011-01-01 00:05:00 0
2011-01-01 00:10:00 1
2011-01-01 00:15:00 0
2011-01-01 00:20:00 1
Freq: 5T, dtype: float64
업데이트 :
코멘트에서 언급 한 바와 같이, 경우 , alarm1
열에는 'YES'
및 'NO'
문자열이 포함되어 있습니다. 여러 가지 방법으로 처리 할 수 있습니다. 예를 들어 값을 부울 값 (예 : tsbool = ts == 'YES'
)으로 변환하고 위의 방법을 사용할 수 있습니다.
또는 사용자 정의 집계 함수를 작성할 수 같은
def func(faults):
return 'YES' if np.any(faults == 'YES') else 'NO'
및 resample
의 how
인수로 제공합니다. 여기에 예제가 있습니다.
먼저 'YES'및 'NO'문자열이 포함 된 시리즈를 만듭니다.
In [60]: rng = pd.date_range('1/1/2011', periods=25, freq='1min')
In [61]: yn = np.array(['NO', 'YES'])
In [62]: ts = pd.Series(yn[(np.random.rand(len(rng)) > 0.85).astype(int)], index=rng)
In [63]: ts
Out[63]:
2011-01-01 00:00:00 NO
2011-01-01 00:01:00 NO
2011-01-01 00:02:00 NO
2011-01-01 00:03:00 NO
2011-01-01 00:04:00 YES
2011-01-01 00:05:00 YES
2011-01-01 00:06:00 NO
2011-01-01 00:07:00 YES
2011-01-01 00:08:00 NO
2011-01-01 00:09:00 NO
2011-01-01 00:10:00 NO
2011-01-01 00:11:00 NO
2011-01-01 00:12:00 NO
2011-01-01 00:13:00 NO
2011-01-01 00:14:00 NO
2011-01-01 00:15:00 NO
2011-01-01 00:16:00 YES
2011-01-01 00:17:00 NO
2011-01-01 00:18:00 NO
2011-01-01 00:19:00 NO
2011-01-01 00:20:00 NO
2011-01-01 00:21:00 NO
2011-01-01 00:22:00 NO
2011-01-01 00:23:00 NO
2011-01-01 00:24:00 NO
Freq: T, dtype: object
'YES'및 'NO'문자열의 배열을 단일 문자열로 줄이는 함수를 정의하십시오.
In [64]: def func(alarms):
....: return 'YES' if np.any(alarms == 'YES') else 'NO'
....:
는
ts
를 리샘플링 기능을 사용합니다.
In [65]: ds = ts.resample('5min', how=func)
In [66]: ds
Out[66]:
2011-01-01 00:00:00 YES
2011-01-01 00:05:00 YES
2011-01-01 00:10:00 NO
2011-01-01 00:15:00 YES
2011-01-01 00:20:00 NO
Freq: 5T, dtype: object
내가 잘못 본 것 같습니다. 내 결함 열에는 YES/NO 데이터가 들어 있는데 파이썬은 부울로 간주하지 않습니다. t/f 대신 y/n을 사용하여 오류 열을 구문 분석 할 수 있습니까? – rwester
@rwester : 답변을 업데이트했습니다. –
새로운 기능을 정의했으며 효과가 좋습니다! 고맙습니다! – rwester