Python-基于每列的值连接多个列

Python-基于每列的值连接多个列,python,pandas,Python,Pandas,需要创建一个新列,该列根据每列的值连接多个列。例如,输入: s1 s2 s3 1 0 0 1 1 0 0 1 2 输出: s1 s2 s3 col 1 0 0 s1 1 1 0 s1, s2 0 1 2 s2, s3 基本上,当值大于0时,我需要输出一个列名,即使数字大于1,也只输出一次 我使用但不起作用的代码: df['col'] = 's1' * min(df['s1'], 1) + ', ' + 's2' * min

需要创建一个新列,该列根据每列的值连接多个列。例如,输入:

s1  s2  s3
1   0   0
1   1   0
0   1   2
输出:

s1  s2  s3  col
1   0   0   s1
1   1   0   s1, s2
0   1   2   s2, s3
基本上,当值大于0时,我需要输出一个列名,即使数字大于1,也只输出一次

我使用但不起作用的代码:

df['col'] = 's1' * min(df['s1'], 1) + ', ' + 's2' * min(df['s2'], 1) + ', ' + 's3' * min(df['s3'], 1)

为比较较大的值(如
0
by)创建掩码,然后与列名称一起用于矩阵乘法:

cols = ["s1", "s2", "s3"]
df['col'] = df[cols].gt(0).dot(df.columns + ',').str[:-1]
print (df)
   s1  s2  s3    col
0   1   0   0     s1
1   1   1   0  s1,s2
2   0   1   2  s2,s3

为比较较大的值(如
0
by)创建掩码,然后与列名称一起用于矩阵乘法:

cols = ["s1", "s2", "s3"]
df['col'] = df[cols].gt(0).dot(df.columns + ',').str[:-1]
print (df)
   s1  s2  s3    col
0   1   0   0     s1
1   1   1   0  s1,s2
2   0   1   2  s2,s3

可以使用
df.apply
lambda
函数执行此操作,如下所示

df[“col”]=df.apply(lambda行:“,”.join(行[row>0].keys().tolist()),axis=1)
当必须将此操作仅应用于特定列时,还可以传递特定列名

df[“col2”]=df[[“s1”、“s2”、“s3”]].apply(lambda行:“,”.join(行[row>0].keys().tolist()),axis=1)

可以使用
df执行。应用
lambda
功能如下

df[“col”]=df.apply(lambda行:“,”.join(行[row>0].keys().tolist()),axis=1)
当必须将此操作仅应用于特定列时,还可以传递特定列名

df[“col2”]=df[[“s1”、“s2”、“s3”]].apply(lambda行:“,”.join(行[row>0].keys().tolist()),axis=1)

优雅的回答!优雅的回答!