>source

안녕하세요 저는 다음과 같은 두 개의 df가 있습니다.

df1

COL1 COL2
A 1
A 2
B 3
B 4
C 5
D 6
E 7
F 8

df2

Old New 
A  A.1
C  C.1
E  E.1

그리고 나는 교체하고 싶습니다 COL1 일치하는 값 df2.Ol d에 의해 df2.New 값.

그리고 얻다 : df1

COL1 COL2
A.1 1
A.1 2
B 3
B 4
C.1 5
D 6
E.1 7
F 8

누군가 제발 아이디어가 있습니까?


  • 답변 # 1

    df1 = pd.read_csv(io.StringIO('''COL1 COL2
    A 1
    A 2
    B 3
    B 4
    C 5
    D 6
    E 7
    F 8 '''),sep='\s+')
    df2 = pd.read_csv(io.StringIO('''Old New 
    A  A.1
    C  C.1
    E  E.1 '''),sep='\s+')
    df1['COL1'] = df1.merge(df2.rename(columns={'Old':'COL1'}),on='COL1',how='left')['New'].fillna(df1['COL1'])
    
    

    산출:

       COL1    COL2
    0   A.1 1
    1   A.1 2
    2   B   3
    3   B   4
    4   C.1 5
    5   D   6
    6   E.1 7
    7   F   8
    
    

  • 답변 # 2

    사용하다 df.to_dictSeries.map :

    In [516]: x = df2.set_index('Old').to_dict()['New']
    In [519]: df1['COL1'] = df1['COL1'].map(x).fillna(df1['COL1'])
    In [521]: df1
    Out[521]: 
      COL1  COL2
    0  A.1     1
    1  A.1     2
    2    B     3
    3    B     4
    4  C.1     5
    5    D     6
    6  E.1     7
    7    F     8
    
    

    시간 비교:

    @adir bargirl의 답변 :

    In [540]: def f1():
         ...:     df1['COL1'] = df1.merge(df2.rename(columns={'Old':'COL1'}),on='COL1',how='left')['New'].fillna(df1['COL1'])
         ...: 
    In [542]: %timeit f1()
    2.09 ms ± 74.2 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
    
    

    내 대답 :

    In [541]: def f2():
         ...:     x = df2.set_index('Old').to_dict()['New']
         ...:     df1['COL1'] = df1['COL1'].map(x).fillna(df1['COL1'])
         ...: 
    In [543]: %timeit f2()
    1.06 ms ± 14.8 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
    
    

관련 자료

  • 이전 wordpress - publish_post 후크에서 포스트 메타를 얻는 방법이 있습니까?
  • 다음 PowerShell을 사용하여 anonfiles에 파일을 업로드하는 방법