有条件的连接或连接python熊猫

问题描述:

我有6列在Excel中,我想加入其中5个;然而,在所有列的单元格中,我没有任何字符串,其中一些具有“0”。我需要的是:加入5列,当单元格不是“0”时使用“>”分隔符,当它为零时,将其保留为空白。你能帮我怎么在python或excel中做到吗?下面的例子:有条件的连接或连接python熊猫

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 

感谢

  • 使用mask打开'0'零字符串到np.nan
  • 当我们与np.nan或空栈,他们被丢弃
  • 现在,我已经放弃了nulls,我可以groupby第一级的pd.MultiIndex我用stack
  • apply'>'.join功能
  • rename系列和joindf

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

感谢,但第一线是不行的第一列,我想是因为我的一些单元格只包含我需要忽略的“0”;然而,一些字符串中有零,所以当我想掩盖它们时,这是行不通的。例如在单元格C2中,我有“AB0LR”。 –

+0

你的一些零是数字,一些是字符串。使用'df = df.astype(str)'将它们全部变成字符串。然后确保你用'df =='0')' – piRSquared

+0

@ S.16掩盖我已经更新了我的文章,并且符合你的期望输出。 – piRSquared

#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://*.com/users/5244995) –