Python : 범주 형 변수의 롤링 시간 수
Oct 04 2020
열이있는 팬더 데이터 프레임이 있고 각각에 대해 지난 1 시간 동안['DateTime', 'Variable'] 롤링 카운트를 얻으려고합니다 . 어떻게 든 생각 피벗을 사용할 수 있습니다.Variable
샘플 데이터
DateTime Variable
8/24/19 3:30PM A
8/24/19 3:32PM A
8/24/19 3:36PM B
8/24/19 3:50PM C
8/25/19 2:50PM A
예상 출력
DateTime A B C
8/24/19 3:30PM 1 0 0
8/24/19 3:32PM 2 0 0
8/24/19 3:36PM 2 1 0
8/24/19 3:50PM 2 1 1
8/25/19 2:50PM 1 0 0
새 변수를 추가하거나 제거 할 수 있으므로 동적 솔루션을 갖고 싶습니다.
답변
RichieV Oct 04 2020 at 02:47
당신은 사실과 함께 시작할 수 pivot, 또는 그 일을 손 으로 groupby.unstack.
그런 다음 여러 기능으로 집계 할 수있는 롤링 윈도우df.rolling 를 생성하려고 합니다. timedelta (이 경우 1 시간)를 사용하여 창을 만들려면 인덱스가 유형 인지 확인해야합니다 .datetime
df['DateTime'] = pd.to_datetime(df['DateTime'])
out = (
df
.groupby(['DateTime', 'Variable']) # set the columns as index
.size() # aggregate by row count
.unstack(fill_value=0) # move 'Variable' index level to columns
.sort_index()
)
out = out.rolling('1h').sum()
산출
Variable A B C
DateTime
2019-08-24 15:30:00 1.0 0.0 0.0
2019-08-24 15:32:00 2.0 0.0 0.0
2019-08-24 15:36:00 2.0 1.0 0.0
2019-08-24 15:50:00 2.0 1.0 1.0
2019-08-25 14:50:00 1.0 0.0 0.0
PrakritiShaurya Oct 04 2020 at 02:01
df가 데이터 세트라고 생각하면 : new_df = df [df [ 'Variable'] == 'A']. resample ( 'H'). count ()
다음과 같이 새 데이터 프레임을 만들 수 있습니다. final_df = pd.DataFrame ({ 'DateTime': new_df.index, 'A': new_df.values})
마찬가지로 변수 열의 각 범주에 대한 개수를 가져와 루프를 사용하여 final_df에 연결해보십시오.
나는 그것을 시도하지 않았지만 잘하면 작동 할 것입니다.