2016-11-08 2 views
1

내가하는 방식으로 데이터 프레임에서 열을 병합 할 :일부 열 목록 값이 비어있을 때 목록 값이 포함 된 열을 병합하는 방법?

list_A  list_B  
A, T, G  G, C   
      B, K   
C, L, AG L, AG, K  
F, K     

출력은해야한다 :

list_A  list_B  list_A&B 
A, T, G  G, C   A, T, G, C 
      B, K   B, K 
C, L, AG L, AG, K  C, L, AG, K 
F, K      F, K 

내가 한 :

df['list_A&B'] = df['list_A'].astype(list) + ', ' + df['list_B'].astype(list)

그리고, 나는 받고있다 :

 list_A list_B   list_A&B 
0 A, T, G  G, C  A, T, G, G, C 
1  NaN  B, K     NaN 
2 C, L, AG L, AG, K C, L, AG, L, AG, K 
3  F, K  NaN     NaN 

목록 중 하나가 비어 있으면 목록의 통합이 문제가됩니다. 하지만 왜? 나는 '유모'를 제거하는 어려움을 겪고이 출력으로

 list_A list_B   list_A&B 
0 A, T, G  G, C  A, T, G, G, C 
1  NaN  B, K   nan, B, K 
2 C, L, AG L, AG, K C, L, AG, L, AG, K 
3  F, K  NaN   F, K, nan 

: df['list_A&B'] = df['list_A'].astype(str) + ', ' + df['list_B'].astype(str)

주는 :

나는 다음 문자열로 unionizing하지만 지금은 추가 유모는 삭제할 수 없습니다 시도 그것들은 문자열로보고되고 dropna()와 fillna()는 그것으로 동작하지 않기 때문입니다.

의견이 있습니다. - K

+0

입니까? 그들은 단지 "A, T, G"와 같은 문자열입니까? 빈 값은 무엇입니까? 빈 문자열입니까? 샘플 데이터 (예 : 샘플 DataFrame을 생성하는 코드)가 포함 된 자체 사례를 제공 할 수 있습니까? – BrenBarn

+0

열의 실제 값은 문자 또는 문자열 목록입니다.열은 탭으로 구분되고 열의 빈 값은 빈 문자열입니다. 즉, 빈 행/열 셀은 빈 값/목록을 나타 내기위한 공백이없는 탭 점프입니다.이 데이터 프레임은 팬더를 사용하여 두 개의 데이터 프레임을 결합하여 생성되었습니다 병합 함수. 빈 값은 (NaN)입니다. 병합에 사용되는 키는별로 관련이 없으며 표시되지 않습니다. – everestial007

+0

데이터에 목록이 표시되지 않습니다. 리스트가 있다면, 그 값은'[ "", "T", "G"]'와 같을 것입니다. – BrenBarn

답변

1

이 코드는 지금까지 제공 한 데이터를 해석하는 간단한 문자열 값입니다.

단계 :

행 방향 sep=',' 및 빈 문자로 처리하여 다른 문자열의 문자와 산재 NaN 값을 담당 na_rep=''str.cat를 사용하여 연결할.

그런 다음 불필요한 공백을 제거하고 set을 사용하여 목록의 고유 요소를 취한 후 filter(None,...)을 사용하여 빈 문자열을 제거하십시오.

마지막으로 결과 목록을 결합하여 괄호를 제외하고 목록의 문자열 표현으로 만듭니다.

df['list_A&B'] = df['list_A'].str.cat(df['list_B'], ',','') \ 
        .apply(lambda x: ', '.join(list(filter(None, set(re.sub(r"\s+", "", x) \ 
        .split(',')))))) 

df     # df.fillna('') to get back your desired output 

enter image description here


DF 사용 시작 : 당신의 열의 실제 값은 무엇

df = pd.DataFrame({'list_A': ['A, T, G', np.NaN, 'C, L, AG ', 'F, K'], 
        'list_B': ['G, C', 'B, K', 'L, AG, K', np.NaN]}) 
df 

enter image description here