连接数据框中除 NaN 之外的所有列
Concatenate all columns in dataframe except for NaN
又一个简单的。我有一个 DataFrame (1056 x 39),其中包含来自数据透视表 table 的参考变量。我现在需要生成一列所有列的串联值,其中不包括 NaN。问题是我有很多干扰输出的 NaN。
基于我发现的另一个 post Concatenating all columns in pandas dataframe,我可以使用这种方法。
df['Merge'] = df.astype(str).agg(' or '.join,axis=1)
问题是 NaN 仍然存在。我如何修改此行以排除 NaN 值(基本上跳过它们),以便输出仅包含连接值。
预期输出应显示为(第一行):
df['Merge'][0] = 'Var1 or Var2 or Var 20 or Var28'(排除所有 NaN 值)
谢谢:)
您可以 stack
删除 NaN
然后转换为字符串和 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
又一个简单的。我有一个 DataFrame (1056 x 39),其中包含来自数据透视表 table 的参考变量。我现在需要生成一列所有列的串联值,其中不包括 NaN。问题是我有很多干扰输出的 NaN。
基于我发现的另一个 post Concatenating all columns in pandas dataframe,我可以使用这种方法。
df['Merge'] = df.astype(str).agg(' or '.join,axis=1)
问题是 NaN 仍然存在。我如何修改此行以排除 NaN 值(基本上跳过它们),以便输出仅包含连接值。
预期输出应显示为(第一行):
df['Merge'][0] = 'Var1 or Var2 or Var 20 or Var28'(排除所有 NaN 值)
谢谢:)
您可以 stack
删除 NaN
然后转换为字符串和 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