잡동사니

반응형

질문

이와 같은 DataFrame이 있습니다.

  id  city      province    status    date
----  --------  ----------  --------  ----------
   1  Cainta    Rizal       failed    22/07/2020
   1  nan       nan         success   22/07/2020
   1  nan       nan         success   22/07/2020
   2  Pasig     Manila      success   22/07/2020
   2  nan       nan         failed    22/07/2020
   2  nan       nan         failed    22/07/2020
   3  Marikina  Manila      failed    22/07/2020
   3  nan       nan         success   22/07/2020
   3  nan       nan         success   22/07/2020

내가 원하는 것은 위의 DataFrame을 다음으로 변환하는 것입니다.

id  city      province    status    date
----  --------  ----------  --------  ----------
   1  Cainta    Rizal       success   22/07/2020
   2  Pasig     Manila      success   22/07/2020
   3  Marikina  Manila      success   22/07/2020

따라서 기준은 상태가 '성공'인 모든 ID에 대해시 및 도의 null이 아닌 값을 가져 오는 것입니다. 이 코드를 사용하여 SQL에서이 작업을 수행 할 수 있으며 pandas에서이를 복제하고 싶습니다.

SELECT ID,
       MAX(CITY) AS CITY,
       MAX(PROVINCE) AS PROVINCE,
       'SUCCESS' AS STATUS,
       MAX(CASE WHEN STATUS = 'SUCCESS' THEN DATE END) AS "DATE",
FROM TABLE
GROUP BY ID

내 예가 명확하기를 바랍니다. 정말 고맙습니다!

편집 : 백만 행 DF에 이것을 할 것입니다.


답변1

가능한 경우 일부 id당 모든 누락 된 값은 GroupBy.ffill을 누른 다음 DataFrame.querystatus및 마지막으로 먼저 가져오기 DataFrame.drop_duplicates :

cols = ['city','province']
df[cols] = df.groupby(df['id'])[cols].ffill()
df = df.query('status == "success"').drop_duplicates('id')
print (df)
   id      city province   status        date
1   1    Cainta    Rizal  success  22/07/2020
3   2     Pasig   Manila  success  22/07/2020
7   3  Marikina   Manila  success  22/07/2020


 

 

 

 

출처 : https://stackoverflow.com/questions/63048519/get-the-non-null-data-for-every-field-partitioned-by-id

반응형

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band