>

이렇게 보이는 테이블이 있습니다-

date        name        values      items
01-03-2019  xyz         900         NaN
NaN         NaN         900         brush
02-03-2019  abc        1200         NaN
NaN         NaN         900         paste
NaN         NaN         300         floss

원하는 결과는-

date            name       values        items
01-03-2019      xyz        900           brush
02-03-2019      abc        1200          paste, floss

나는 np.where ()를 사용하여 각 항목 NaN의 값을 만들 수 있다는 것을 알고 있지만 연결에 대해 어떻게 진행 해야하는지 알지 못하고 결과를 이름과 함께 위로 올립니다.

  • 답변 # 1

    GroupBy.agg 사용  첫 번째 열과 ffill   date 가없는 각 열에 대해 동적으로 생성 된 결 측값 및 사전 순방향 채우기  그리고 items  집계 함수 GroupBy.first 가 적용됩니다.  마지막 열 items  사용 된 join  결 측값이 제거 된 상태 :

    d = dict.fromkeys(df.columns.difference(['date','items']), 'first')
    d['items'] = lambda x: ', '.join(x.dropna())
    df = df.groupby(df['date'].ffill()).agg(d).reset_index()
    print (df)
             date name  values         items
    0  01-03-2019  xyz     900         brush
    1  02-03-2019  abc    1200  paste, floss
    
    

    열이 거의없는 경우 groupby 에 2 개의 열을 전달하십시오.   ffill 와 함께   agg 에 전달 된 사전을 작성하십시오. :

    df = (df.groupby([df['date'].ffill(), df['name'].ffill()])
           .agg({'values':'first', 'items':lambda x: ', '.join(x.dropna())})
           .reset_index())
    print (df)
             date name  values         items
    0  01-03-2019  xyz     900         brush
    1  02-03-2019  abc    1200  paste, floss
    
    

  • 답변 # 2

    fillna 를 사용할 수 있습니다   forwardfill (ffill) 와 함께 . 그런 다음 dropna  그리고 동시에 groupby   agg 와 함께   sum 를 얻기 위해  가치를 높이고 아이템의 문자열을 연결하십시오 :

    df[['date', 'name']] = df[['date', 'name']].fillna(method='ffill')
    df = df.dropna().groupby('date').agg({'name':'first',
                                          'values':'sum',
                                          'items':', '.join}).reset_index()
    print(df)
             date name  values         items
    0  01-03-2019  xyz     900         brush
    1  02-03-2019  abc    1200  paste, floss
    
    
    

관련 자료

  • 이전 symfony 4.2 - Symfony42 자동 와이어 번들 서비스
  • 다음 hyperledger fabric - 오류 원격 오류로 인해 tls 핸드 셰이크에 실패했습니다 tls - 잘못된 인증 서버 = 주문