连接dataframe中除NaN之外的所有列

2024-04-19 23:55:51 发布

您现在位置:Python中文网/ 问答频道 /正文

另一个简单的。我有一个数据帧(1056 x 39),其中包含来自透视表的引用变量。我现在需要生成一列所有列的连接值,这些列不包括NAN。问题是我有相当多的NAN干扰了输出

根据我找到的另一篇文章Concatenating all columns in pandas dataframe,我可以使用这种方法

df['Merge'] = df.astype(str).agg(' or '.join,axis=1)

问题是南斯仍然存在。如何修改此行以排除NaN值(基本上跳过它们),从而使输出仅包含串联的值

预期输出应显示为(第一行):

df['Merge'][0]='Var1或Var2或var20或Var28'(排除所有NaN值)

谢谢:)


Tags: columns数据方法indataframepandasdf文章
1条回答
网友
1楼 · 发布于 2024-04-19 23:55:51

您可以stack删除NaN,然后强制转换为string和groupby+str.join

import pandas as pd
df = pd.DataFrame([[1.0, np.NaN, 2, 3, 'foo'], [np.NaN, None, 5, 'bar', 'bazz']])

df['merged'] = df.stack().astype(str).groupby(level=0).agg(' or '.join)
#     0   1  2    3     4                merged
#0  1.0 NaN  2    3   foo  1.0 or 2 or 3 or foo
#1  NaN NaN  5  bar  bazz      5 or bar or bazz

或者可以沿行应用,删除空值,强制转换为字符串,然后合并所有非空值

df = pd.DataFrame([[1.0, np.NaN, 2, 3, 'foo'], [np.NaN, None, 5, 'bar', 'bazz']])

df['merged'] = df.apply(lambda row: ' or '.join(row.dropna().astype(str)), axis=1)
#     0   1  2    3     4                merged
#0  1.0 NaN  2    3   foo  1.0 or 2 or 3 or foo
#1  NaN NaN  5  bar  bazz      5 or bar or bazz

相关问题 更多 >