有条件的连接或连接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
系列和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
答
#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) –
感谢,但第一线是不行的第一列,我想是因为我的一些单元格只包含我需要忽略的“0”;然而,一些字符串中有零,所以当我想掩盖它们时,这是行不通的。例如在单元格C2中,我有“AB0LR”。 –
你的一些零是数字,一些是字符串。使用'df = df.astype(str)'将它们全部变成字符串。然后确保你用'df =='0')' – piRSquared
@ S.16掩盖我已经更新了我的文章,并且符合你的期望输出。 – piRSquared