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)
优雅的回答!优雅的回答!