열 값에 따라 다른 조건으로 여러 열에 조건이 지정된 데이터 프레임 필터링

여기에

여러 열에 조건이 지정된 데이터 프레임을 필터링하려고합니다. 문제는 조건이 열 값에 따라 변경된다는 것입니다.

예를 들어 다음과 같은 원시 데이터 세트가 있습니다.

df_assets = pd.DataFrame(
    {'asset_id': ['10092', '39883', '82883', '28883', '09093', '27817', '38261', '28372', '38472', '39738'],
     'asset_type' :['laptop', 'mousepad', 'mouse', 'pen', 'pen', 'monitor', 'wire', 'laptop', 'keyboard', 'mouse'],
     'quantity': [3, 12, 12, 10, 2, 0, 21, 0, 10, 16],
     'assigned': ['susan', 'jane', 'amy', 'ben', 'donald', 'evan', 'chris', 'fred', 'henry', 'george']
    })
+--------+----------+--------+--------+
|asset_id|asset_type|assigned|quantity|
+--------+----------+--------+--------+
|   10092|    laptop|   susan|     3.0|
|   39883|  mousepad|    jane|    12.0|
|   82883|     mouse|     amy|    12.0|
|   28883|       pen|     ben|    10.0|
|   09093|       pen|  donald|     2.0|
|   27817|   monitor|    evan|     0.0|
|   38261|      wire|   chris|    21.0|
|   28372|    laptop|    fred|     0.0|
|   38472|  keyboard|   henry|    10.0|
|   39738|     mouse|  george|    16.0|
+--------+----------+--------+--------+

다음 사전에 명시된 것보다 더 많은 수량의 행을 반환하는 필터를 적용하고 싶습니다 (예 : 수량> = 10 인 키보드, 수량> = 10 인 와이어, 수량> = 1 인 노트북 등). 또한 사전에 지정된 자산 유형을 포함하지 않는 행을 반환하고 싶습니다.

d = {'keyboard': 10, 'wire': 20, 'laptop': 1, 'mouse': 15, 'monitor': 1}

출력은

+--------+----------+--------+--------+
|asset_id|asset_type|assigned|quantity|
+--------+----------+--------+--------+
|   10092|    laptop|   susan|     3.0|
|   38261|      wire|   chris|    21.0|
|   39738|     mouse|  george|    16.0|
|   38472|  keyboard|   henry|    10.0|
|   39883|  mousepad|    jane|    12.0|
|   28883|       pen|     ben|    10.0|
|   09093|       pen|  donald|     2.0|
+--------+----------+--------+--------+

이를 수행하는 우아한 방법이 있습니까? 딕셔너리의 각 항목에 대한 데이터 프레임을 필터링 및 생성하고 최종 데이터 프레임에 추가하여 위의 내용을 구현했습니다.

count = 0
for k, v in d.items():
    sdf_filter = sdf_assets.filter( (f.col('asset_type') == k) & (f.col('quantity') >= v) )
    if count != 0:
        sdf_thresholded = sdf_thresholded.union(sdf_filter)
    else:
        sdf_thresholded = sdf_filter
    count += 1

sdf_result_test = sdf_thresholded.union(sdf_assets.filter(~f.col('asset_type').isin(d.keys())))

전체 데이터 세트에 많은 항목이 있기 때문에 PySpark에서 모든 것을 작성했지만 파이썬의 모든 솔루션을 고맙게 생각합니다!

파울리

먼저 사전 d을 Spark DataFrame으로 변환하십시오 .

d = {'keyboard': 10, 'wire': 20, 'laptop': 1, 'mouse': 15, 'monitor': 1}
d = spark.createDataFrame(d.items(), ["asset_type", "min_quantity"])
d.show()
#+----------+------------+
#|asset_type|min_quantity|
#+----------+------------+
#|    laptop|           1|
#|      wire|          20|
#|     mouse|          15|
#|   monitor|           1|
#|  keyboard|          10|
#+----------+------------+

이제 df_assetsDataFrame을 시작 하여 이것을 LEFT 조인 하고 where조건에 따라 행을 필터링하는 데 사용할 수 있습니다. d크기가 작기 때문에 성능 향상을 위해 broadcast조인사용할 수 있습니다 .

from pyspark.sql.functions import broadcast 

# first convert from pandas DataFrame to spark DataFrame
df_assets = spark.createDataFrame(df_assets)

# left join with d
df_assets.join(broadcast(d), on="asset_type", how="left")\
    .where("min_quantity IS NULL or quantity >= min_quantity")\
    .select("asset_id", "asset_type", "assigned", "quantity")\
    .show()
#+--------+----------+--------+--------+
#|asset_id|asset_type|assigned|quantity|
#+--------+----------+--------+--------+
#|   10092|    laptop|   susan|       3|
#|   39883|  mousepad|    jane|      12|
#|   28883|       pen|     ben|      10|
#|   09093|       pen|  donald|       2|
#|   38261|      wire|   chris|      21|
#|   38472|  keyboard|   henry|      10|
#|   39738|     mouse|  george|      16|
#+--------+----------+--------+--------+

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

다른 열의 조건에 따라 데이터 프레임 필터링

분류에서Dev

여러 조건에 따라 열 이름으로 데이터 프레임 필터링

분류에서Dev

조건에 따라 다른 데이터 프레임에서 데이터 프레임 열에 대한 값 설정

분류에서Dev

조건에 따라 다른 열 기반의 값으로 데이터 프레임 열의 값 변경

분류에서Dev

조건에 따라 다른 데이터 프레임에서 열 값 복사

분류에서Dev

조건에 따라 다른 데이터 프레임의 값에서 데이터 프레임에 새 열 추가

분류에서Dev

여러 열의 조건에 따라 데이터 프레임 열의 특정 값 변경

분류에서Dev

파이썬, 여러 조건에 따라 데이터 프레임 필터링

분류에서Dev

조건에 따라 pandas 데이터 프레임의 한 열에서 다른 열로 값 제공

분류에서Dev

열의 값에 따라 다른 함수를 사용하여 조건부로 그룹화 된 데이터 프레임을 집계합니다.

분류에서Dev

조건에 따라 다른 데이터 프레임의 열 추가

분류에서Dev

Pyspark의 여러 열에서 여러 조건으로 스파크 데이터 프레임 필터링

분류에서Dev

팬더별로 다른 열에 조건을 적용하여 데이터 프레임 필터링

분류에서Dev

다른 열의 조건에 따라 단일 데이터 프레임 열의 값에 대한 Wilcox 테스트

분류에서Dev

다른 열의 조건에 따라 다른 열의 평균 인 Pandas 데이터 프레임에 열 추가

분류에서Dev

Pandas 데이터 프레임의 여러 열에 대한 조건부 필터링

분류에서Dev

다른 열에 조건을 적용하여 데이터 프레임의 열 필터링 시도

분류에서Dev

R : 조건 (크기가 다른 데이터 프레임)에 따라 다른 데이터 프레임의 열에서 열에 값을 할당합니다.

분류에서Dev

조건에 따라 데이터 프레임의 특정 값을 다른 데이터 프레임의 값으로 바꿉니다.

분류에서Dev

조건에 따라 데이터 프레임의 열에있는 여러 값 바꾸기

분류에서Dev

조건에 따라 데이터 프레임에 열 추가

분류에서Dev

조건에 따라 데이터 프레임에 열 추가

분류에서Dev

특정 조건에 따라 데이터 프레임의 값을 다른 데이터 프레임의 값으로 바꾸는 방법은 무엇입니까?

분류에서Dev

조건에 따라 pyspark 데이터 프레임을 여러 데이터 프레임으로 분할

분류에서Dev

제약 조건에 따른 데이터 프레임 열 생성

분류에서Dev

조건에 따라 Pandas 데이터 프레임의 특정 열에서 다음 줄 업데이트

분류에서Dev

조건에 따라 다른 데이터 프레임 열에서 값 가져 오기

분류에서Dev

조건에 따라 데이터 프레임 행 필터링 Pandas

분류에서Dev

Pandas 데이터 프레임의 특정 조건에 따라 행 필터링

Related 관련 기사

  1. 1

    다른 열의 조건에 따라 데이터 프레임 필터링

  2. 2

    여러 조건에 따라 열 이름으로 데이터 프레임 필터링

  3. 3

    조건에 따라 다른 데이터 프레임에서 데이터 프레임 열에 대한 값 설정

  4. 4

    조건에 따라 다른 열 기반의 값으로 데이터 프레임 열의 값 변경

  5. 5

    조건에 따라 다른 데이터 프레임에서 열 값 복사

  6. 6

    조건에 따라 다른 데이터 프레임의 값에서 데이터 프레임에 새 열 추가

  7. 7

    여러 열의 조건에 따라 데이터 프레임 열의 특정 값 변경

  8. 8

    파이썬, 여러 조건에 따라 데이터 프레임 필터링

  9. 9

    조건에 따라 pandas 데이터 프레임의 한 열에서 다른 열로 값 제공

  10. 10

    열의 값에 따라 다른 함수를 사용하여 조건부로 그룹화 된 데이터 프레임을 집계합니다.

  11. 11

    조건에 따라 다른 데이터 프레임의 열 추가

  12. 12

    Pyspark의 여러 열에서 여러 조건으로 스파크 데이터 프레임 필터링

  13. 13

    팬더별로 다른 열에 조건을 적용하여 데이터 프레임 필터링

  14. 14

    다른 열의 조건에 따라 단일 데이터 프레임 열의 값에 대한 Wilcox 테스트

  15. 15

    다른 열의 조건에 따라 다른 열의 평균 인 Pandas 데이터 프레임에 열 추가

  16. 16

    Pandas 데이터 프레임의 여러 열에 대한 조건부 필터링

  17. 17

    다른 열에 조건을 적용하여 데이터 프레임의 열 필터링 시도

  18. 18

    R : 조건 (크기가 다른 데이터 프레임)에 따라 다른 데이터 프레임의 열에서 열에 값을 할당합니다.

  19. 19

    조건에 따라 데이터 프레임의 특정 값을 다른 데이터 프레임의 값으로 바꿉니다.

  20. 20

    조건에 따라 데이터 프레임의 열에있는 여러 값 바꾸기

  21. 21

    조건에 따라 데이터 프레임에 열 추가

  22. 22

    조건에 따라 데이터 프레임에 열 추가

  23. 23

    특정 조건에 따라 데이터 프레임의 값을 다른 데이터 프레임의 값으로 바꾸는 방법은 무엇입니까?

  24. 24

    조건에 따라 pyspark 데이터 프레임을 여러 데이터 프레임으로 분할

  25. 25

    제약 조건에 따른 데이터 프레임 열 생성

  26. 26

    조건에 따라 Pandas 데이터 프레임의 특정 열에서 다음 줄 업데이트

  27. 27

    조건에 따라 다른 데이터 프레임 열에서 값 가져 오기

  28. 28

    조건에 따라 데이터 프레임 행 필터링 Pandas

  29. 29

    Pandas 데이터 프레임의 특정 조건에 따라 행 필터링

뜨겁다태그

보관