2017-05-04 1 views
1

Excel에서 6 개의 열이 있는데 그 중 5 개를 조인하고 싶습니다. 그러나 모든 열의 셀에는 "0"을 가진 문자열이 없습니다. 내가 필요한 것은 : 5 열에 가입하고 셀이 "0"이 아닐 때 ">"구분 기호를 사용하고 0 일 때 공백으로 두십시오. 파이썬으로 어떻게 할 수 있을까요? 아니면 Excel에서 도와 줄 수 있습니까? 다음 예 : 우리가 np.nan 또는 널 (null)와 중복되면조건부 조인 또는 파이썬 팬더에서 연결

The original file is:(C1:C6 are columns' name) 
C1   C2   C3    C4    C5    C6 
H1   C0   0    L    L    0 
H2   R0LL   AB   0    0    0 

I need the results like:(C1 and RESULTS are columns'name) 

C1    RESULTS 
H1    C0>L>L 
H2    R0LL>AB 

감사

답변

0
  • 사용 mask 내가 떨어으니, 그들이
  • 를 삭제됩니다 np.nan
  • '0' 제로 문자열을 끄려면 nulls, 나는 groupby의 첫 번째 레벨 pd.MultiIndex으로 만들었습니다. stack
  • 로 만들었습니다.
  • apply'>'.join 기능 df

df = df.astype(str) 
s = df.mask(df == '0').loc[:, 'C2':'C6'].stack() 
s = s.groupby(level=0).apply('>'.join).rename('RESULTS') 
c = df[['C1']] 
df[['C1']].join(s) 

    C1 RESULTS 
0 H1 C0>L>L 
1 H2 R0LL>AB 
+0

감사합니다,하지만 첫 번째 줄이 작동하지 않습니다의 첫 번째 열을

  • rename 시리즈와 join 나는 일부 때문에 생각 내 셀에는 무시할 필요가있는 "0"만 포함됩니다. 그러나 문자열의 일부는 0을 가지므로 마스크를 적용 할 때 작동하지 않습니다. 예를 들어 C2 셀에는 "AB0LR"이 있습니다. –

  • +0

    일부 0은 숫자이고 일부는 문자열입니다. 'df = df.astype (str)'으로 모든 문자열을 만드십시오. 'df == '0')' – piRSquared

    +0

    @ S.16 내 게시물을 업데이트했고 예상 출력과 일치하는지 확인하십시오. – piRSquared

    -1
    #use apply to join the non 0 columns by '>' 
    df['RESULTS'] = df.apply(lambda x: '>'.join([e for e in x[1:].astype(str) if e!='0']),axis=1) 
    
    df 
    Out[90]: 
        C1 C2 C3 C4 C5 C6 RESULTS 
    0 H1 C0 0 L L 0 C0>L>L 
    1 H2 R0LL AB 0 0 0 R0LL>AB 
    
    +0

    [편집] 링크를 사용하여이 코드의 작동 방식을 설명하고 코드를 제공하지 마십시오. 설명이 향후 독자를 도울 수 있습니다. [답변]을 참조하십시오. [출처] (http://stackoverflow.com/users/5244995) –