행당 동적 조건으로 Pandas df 요소를 계산하는 방법 (= countif)

KingOtto

Pandas에서 COUNTIF와 동등한 작업을 수행하기 위해 노력하고 있습니다. 를 사용하여 머리를 돌리려고 노력하고 groupby있지만 논리적 그룹화 조건이 동적이기 때문에 어려움을 겪고 있습니다.

고객 목록과 방문한 날이 있다고 가정 해 보겠습니다. 두 가지 논리적 조건을 기반으로 신규 고객을 식별하고 싶습니다.

  • 동일한 고객이어야합니다 (동일 Guest ID).
  • 그들은 전날 거기에 있었을 것입니다

두 조건이 모두 충족되면 재 방문 고객입니다. 그렇지 않다면 그들은 새로운 것입니다 (따라서 newby = 1-...새로운 고객을 식별합니다.

나는 for루프로 이것을 할 수 있었지만 분명히 성능이 끔찍하고 이것은 팬더의 논리에 거의 위배됩니다.

다음 코드를 루프보다 더 똑똑한 것으로 어떻게 래핑 할 수 있습니까?

for i in range (0, len(df)):
    newby = 1-np.sum((df["Day"] == df.iloc[i]["Day"]-1) & (df["Guest ID"] == df.iloc[i]["Guest ID"]))

게시물 은 상태가 정적이기 때문에 도움 되지 않습니다. 나는 df많은 범주 (많은 고객 이름)를 갖고 더 복잡한 논리적 문장을 작성하고 싶기 때문에 를 전치하는 것과 같은 "더미 열"의 도입을 피하고 싶습니다. 많은 보조 컬럼으로 끝나는 위험을 감수하고 싶지 않습니다.

다음 입력이 있습니다.

df
   Day     Guest ID
0  3230    Tom
1  3230    Peter
2  3231    Tom
3  3232    Peter
4  3232    Peter

이 출력을 기대하십시오

df
   Day     Guest ID      newby
0  3230    Tom           1
1  3230    Peter         1
2  3231    Tom           0
3  3232    Peter         1
4  3232    Peter         1

그 요소를 참고 3하고 4필요없는 복제 - (예 : 자신의 순서와) 열을 다양한 추가가있을 수 있습니다 주어진.

다니 메세 호

하다:

# ensure the df is sorted by date 
df = df.sort_values('Day')

# group by customer and find the diff within each group
df['newby'] = (df.groupby('Guest ID')['Day'].transform('diff').fillna(2) > 1).astype(int)
print(df)

산출

    Day Guest ID  newby
0  3230      Tom      1
1  3230    Peter      1
2  3231      Tom      0
3  3232    Peter      1

최신 정보

하루에 여러 번 방문이 허용되는 경우 다음을 수행 할 수 있습니다.

# only keep unique visits per day
uniques = df.drop_duplicates()

# ensure the df is sorted by date
uniques = uniques.sort_values('Day')

# group by customer and find the diff within each group
uniques['newby'] = (uniques.groupby('Guest ID')['Day'].transform('diff').fillna(2) > 1).astype(int)

# merge the uniques visits back into the original df
res = df.merge(uniques, on=['Day', 'Guest ID'])

print(res)

산출

    Day Guest ID  newby
0  3230      Tom      1
1  3230    Peter      1
2  3231      Tom      0
3  3232    Peter      1
4  3232    Peter      1

대안으로 정렬 또는 병합없이 다음을 수행 할 수 있습니다.

lookup = {(day + 1, guest) for day, guest in df[['Day', 'Guest ID']].value_counts().to_dict()}
df['newby'] = (~pd.MultiIndex.from_arrays([df['Day'], df['Guest ID']]).isin(lookup)).astype(int)
print(df)

산출

    Day Guest ID  newby
0  3230      Tom      1
1  3230    Peter      1
2  3231      Tom      0
3  3232    Peter      1
4  3232    Peter      1

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

MS Excel : COUNTIF ()를 동적으로 사용하는 방법

분류에서Dev

조건부를 기반으로 pandas df 열을 '분할'하고 df를 피벗하는 방법

분류에서Dev

Pandas DataFrame, 여러 행을 기반으로 새 열 요소를 계산하는 방법

분류에서Dev

동적으로 할당 된 메모리의 크기를 동적으로 계산하는 방법

분류에서Dev

jquery를 사용하여 동적으로 행을 추가하고 합계를 계산하는 방법

분류에서Dev

Pandas를 사용하여 여러 열 조건을 기반으로 행을 계산하는 방법은 무엇입니까?

분류에서Dev

Pandas timeseries df를 일부 측정의 동일한 누적을 나타내는 새 행으로 리샘플링하는 방법은 무엇입니까?

분류에서Dev

일부 조건에 따라 두 레벨 요소를 동적으로 렌더링하는 방법

분류에서Dev

pyspark SQL : 여러 조건으로 행을 계산하는 방법

분류에서Dev

jquery로 동적 열의 합계를 계산하는 방법

분류에서Dev

테이블 행이 동적으로 추가 될 때 테이블의 행 수를 계산하는 방법

분류에서Dev

FOR 루프를 피하면서 data.table에서 행 값을 동적으로 계산하는 방법

분류에서Dev

그리드 행 및 열 인덱스를 동적으로 할당하는 방법

분류에서Dev

이상한 요구 사항으로 조건부 계산을 수행하는 방법

분류에서Dev

Pandas에서 조건을 기반으로 값을 할당하는 효율적인 방법은 무엇입니까?

분류에서Dev

r의 조건에 따라 선택한 행으로 새 df를 만드는 방법은 무엇입니까?

분류에서Dev

ARRAYFORMULA를 사용하여 누적 합계로 계산을 수행하는 방법

분류에서Dev

동적으로 추가 된 행에서 계산을 수행하는 방법

분류에서Dev

조건을 충족하고 해당 숫자를 반환하는 값의 수를 재귀 적으로 계산

분류에서Dev

목록에서 문자열과 일치하는 행을 찾기 위해 pandas df를 동적으로 마스킹

분류에서Dev

배열이 1 개 요소로 선언 될 때 동적으로 메모리를 할당하는 방법

분류에서Dev

배열이 1 개 요소로 선언 될 때 동적으로 메모리를 할당하는 방법

분류에서Dev

Pandas : 동일한 열에서 두 가지 조건을 기반으로 행을 선택하는 방법

분류에서Dev

행렬 요소를 무작위로 할당하는 방법

분류에서Dev

Pandas에서 조건부 누적 이동 함수를 수행하는 방법은 무엇입니까?

분류에서Dev

pandas df 상관에서 요소 수를 얻는 방법

분류에서Dev

동일한 행과 선으로 DF1을 초과하는 DF2를 기반으로 데이터 프레임 생성 (특수 병합 조건)

분류에서Dev

주기적으로 격자의 행의 요소를 요약하는 방법

분류에서Dev

Pandas의 이전 행을 기반으로 논리 연산을 수행 할 수있는 df (itertuples)를 반복하는 방법

Related 관련 기사

  1. 1

    MS Excel : COUNTIF ()를 동적으로 사용하는 방법

  2. 2

    조건부를 기반으로 pandas df 열을 '분할'하고 df를 피벗하는 방법

  3. 3

    Pandas DataFrame, 여러 행을 기반으로 새 열 요소를 계산하는 방법

  4. 4

    동적으로 할당 된 메모리의 크기를 동적으로 계산하는 방법

  5. 5

    jquery를 사용하여 동적으로 행을 추가하고 합계를 계산하는 방법

  6. 6

    Pandas를 사용하여 여러 열 조건을 기반으로 행을 계산하는 방법은 무엇입니까?

  7. 7

    Pandas timeseries df를 일부 측정의 동일한 누적을 나타내는 새 행으로 리샘플링하는 방법은 무엇입니까?

  8. 8

    일부 조건에 따라 두 레벨 요소를 동적으로 렌더링하는 방법

  9. 9

    pyspark SQL : 여러 조건으로 행을 계산하는 방법

  10. 10

    jquery로 동적 열의 합계를 계산하는 방법

  11. 11

    테이블 행이 동적으로 추가 될 때 테이블의 행 수를 계산하는 방법

  12. 12

    FOR 루프를 피하면서 data.table에서 행 값을 동적으로 계산하는 방법

  13. 13

    그리드 행 및 열 인덱스를 동적으로 할당하는 방법

  14. 14

    이상한 요구 사항으로 조건부 계산을 수행하는 방법

  15. 15

    Pandas에서 조건을 기반으로 값을 할당하는 효율적인 방법은 무엇입니까?

  16. 16

    r의 조건에 따라 선택한 행으로 새 df를 만드는 방법은 무엇입니까?

  17. 17

    ARRAYFORMULA를 사용하여 누적 합계로 계산을 수행하는 방법

  18. 18

    동적으로 추가 된 행에서 계산을 수행하는 방법

  19. 19

    조건을 충족하고 해당 숫자를 반환하는 값의 수를 재귀 적으로 계산

  20. 20

    목록에서 문자열과 일치하는 행을 찾기 위해 pandas df를 동적으로 마스킹

  21. 21

    배열이 1 개 요소로 선언 될 때 동적으로 메모리를 할당하는 방법

  22. 22

    배열이 1 개 요소로 선언 될 때 동적으로 메모리를 할당하는 방법

  23. 23

    Pandas : 동일한 열에서 두 가지 조건을 기반으로 행을 선택하는 방법

  24. 24

    행렬 요소를 무작위로 할당하는 방법

  25. 25

    Pandas에서 조건부 누적 이동 함수를 수행하는 방법은 무엇입니까?

  26. 26

    pandas df 상관에서 요소 수를 얻는 방법

  27. 27

    동일한 행과 선으로 DF1을 초과하는 DF2를 기반으로 데이터 프레임 생성 (특수 병합 조건)

  28. 28

    주기적으로 격자의 행의 요소를 요약하는 방법

  29. 29

    Pandas의 이전 행을 기반으로 논리 연산을 수행 할 수있는 df (itertuples)를 반복하는 방법

뜨겁다태그

보관