我有一个包含3列的数据集,偶尔还有NA。我正在尝试创建一个名为'check'的新字符串列,该字符串列将在下划线('_')之间的每一行中串联不包含NA的变量的名称。我在下面粘贴了我的代码以及所拥有的数据,所需的数据和实际获得的内容(请参见代码后的超链接)。出于某种原因,似乎已经完全忽略了我已有的条件,并且在有或没有条件代码块的每个循环中都执行example_set ['check'] = example_set ['check'] +列。我假设有一个我还没有完全理解的Python / Pandas怪癖...您能帮忙吗?
example_set = pd.DataFrame({
'A':[3,4,np.nan]
,'B':[1,np.nan,np.nan]
,'C':[3,4,5]
}
)
example_set
columns = list(example_set.columns)
example_set['check'] = '_'
for column in columns:
for row in range(example_set.shape[0]):
if example_set[column][row] != np.nan:
example_set['check'] = example_set['check'] + column
else:
continue
example_set
最简单的策略是复制df。在其中创建一个新列。遍历旧df的行,过滤nan单元格,然后获取剩余的索引。将它们连接成字符串,然后将这些值放入新的df中。它可能不是最有效的方法,但应该易于理解。
这里有一些代码可以帮助您前进:
nset = example_set.copy()
nset["checked"] = "__"
for s in range(example_set.shape[0]):
serie = example_set.iloc[s]
nserie = serie[serie.notnull()]
names = "".join(nserie.index.tolist())
nset.at[s, "checked"] = "__" + names + "__"