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에 연결해보십시오.

나는 그것을 시도하지 않았지만 잘하면 작동 할 것입니다.