>

Python을 처음 사용하고 있으며 Pandas를 사용하여 csv를 정리하려고합니다.

현재 데이터 프레임은 다음과 같습니다 :

  Time   Summary
0  10     ABC Company
1  4      Company XYZ
2  20     The Awesome Company
3  4      Record B

그리고 다음과 같은 목록이 있습니다 :

clients = ['ABC', 'XYZ', 'Awesome']

내가 가진 과제는 데이터 프레임에서 목록의 모든 값과 동일한 값을 추출하는 것입니다.

데이터 프레임을 다음과 같이 표시하고 싶습니다 :

  Time   Summary              Client
0  10     ABC Company          ABC
1  4      Company XYZ          XYZ
2  20     The Awesome Company  Awesome
3  4      Record B             NaN

regex, .any 및 in을 살펴 보았지만 for 루프에서 구문을 올바르게 얻을 수없는 것 같습니다.

  • 답변 # 1

    당신은 다음과 같은 일을 할 수 있습니다 :

    import numpy as np
    
    def match_client(summary):
        client_matches = [client for client in ['ABC', 'XYZ', 'Awesome'] if client in summary]
        if len(client_matches) == 0:
            return np.nan
        else:
            return ', '.join(client_matches)
    df['Client'] = df['Summary'].map(match_client)
    
    

  • 답변 # 2

    @Simon의 답변을 보완하기 위해 다른 고객에게 적용하려면 클라이언트 목록을 인수로 전달하면됩니다.

    import numpy as np
    def match_client(summary, clients):
        client_matches = [client for client in clients if client in summary]
        if len(client_matches) == 0:
            return np.nan
        else:
            return ', '.join(client_matches)
    clients = ['ABC', 'XYZ', 'Awesome']
    df['Client'] = df['Summary'].map(lambda x: match_client(x, clients))
    
    

    clients 를 전달할 수 있도록 람다 함수 만 사용하면됩니다.   map 내부의 추가 인수로 .

  • 답변 # 3

    pandas.Series.str.extract

    일치하는 항목이 있다고 가정

    df.assign(Client=df.Summary.str.extract(f"({'|'.join(clients)})"))
       Time              Summary   Client
    0    10          ABC Company      ABC
    1     4          Company XYZ      XYZ
    2    20  The Awesome Company  Awesome
    3     4             Record B      NaN
    
    

    <시간> 위즈 위즈

    더 있을지도 모른다 ... 당신은 전혀 모른다.

    pandas.Series.str.findall
    
    

    df.join(df.Summary.str.findall('|'.join(clients)).str.join('|').str.get_dummies()) Time Summary ABC Awesome XYZ 0 10 ABC Company 1 0 0 1 4 Company XYZ 0 0 1 2 20 The Awesome Company 0 1 0 3 4 Record B 0 0 0

관련 자료

  • 이전 javafx - Jackson 데이터 바인드로 객체를 직렬화 할 때 Java InvalidDefinitionException 발생
  • 다음 Java의 객체에 대한 포인터 목록이있는 객체 유형의 ArrayList를 가질 수 있습니까?