>  기사  >  백엔드 개발  >  다른 DataFrame 행 필터를 기반으로 열을 만드는 방법은 무엇입니까?

다른 DataFrame 행 필터를 기반으로 열을 만드는 방법은 무엇입니까?

WBOY
WBOY앞으로
2024-02-09 13:30:04542검색

如何基于其他 DataFrame 行过滤器创建列?

질문 내용

"time"이라는 시간별 날짜/시간 열이 포함된 "hourly_data"라는 지연 프레임이 있습니다. 또한 "start"(미래 기간의 시작 날짜/시간) 및 "end"(미래 기간의 종료 시간)라는 두 개의 날짜/시간 열을 포함하는 "future_기간"이라는 데이터프레임이 있습니다. 중요한 것은 이러한 미래 기간이 겹치지 않는다는 것입니다.

hourly_data 지연 프레임에 대해 "기간"이라는 열을 생성하고 싶습니다. hourly_data의 시간 열 값은 기간(future_기간 데이터 프레임 행, 기간이 10개인 경우 0~9)을 기준으로 int 값이 있어야 합니다. 값은 future_기간의 시작 및 끝 열 값.

저는 다음을 시도했습니다:

으아악

하지만 이렇게 하면 오류가 발생합니다. typeerror: values 인수

에 대해 지원되지 않는 유형 'expr'을 사용하여 시리즈 생성자를 호출하는 중입니다.

내가 이루고 싶은 것: 입력:

으아악

출력:

periods = pl.series(range(future_periods.height))
hourly_data = hourly_data.with_columns(
    (
        pl.when(((future_periods.get_column('start') <= pl.col('time')) & (pl.col('time') <= future_periods.get_column('end'))).any())
        .then(periods.filter(pl.series((future_periods.get_column('start') <= pl.col('real_time')) & (pl.col('real_time') <= future_periods.get_column('end')))).to_list()[0])
        .otherwise(none)
    ).alias('period')
)

정답


일반적으로 말하면 부등식 조인이고, 귀하의 경우에는 범위 조인입니다. 이를 수행하는 한 가지 방법이 있습니다. 몇 가지 샘플 데이터를 만들어 시작해 보겠습니다.

으아악

이제 두 단계로 이를 수행할 수 있습니다. 먼저 time 和未来时段 id:

사이의 링크를 계산합니다. 으아악

원본 데이터 프레임과 결합할 수 있습니다:

으아악

이를 수행하는 또 다른 방법은 duckdb 感谢 与 polars 통합을 사용하는 것입니다.

으아악

위 내용은 다른 DataFrame 행 필터를 기반으로 열을 만드는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제