有意将变量名称连接到Python中的新变量中

问题描述 投票:0回答:1

我有一个包含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

Data that I have

Data that I was hoping to get

What I actually get

python-3.x pandas string if-statement concatenation
1个回答
0
投票

最简单的策略是复制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 + "__"
© www.soinside.com 2019 - 2024. All rights reserved.