合并熊猫中的列以创建新列

Ana*_*eam 0 dataframe python-3.x pandas feature-engineering

您好,我正在研究pandas数据框,我想创建一个包含多个列并对其应用条件的列,我正在寻找一种做到这一点的聪明方法。

假设数据框看起来像

A   B   C   D
1   0   0   0
0   1   0   0
0   0   1   0
1   0   1   0
1   1   1   0
0   0   1   1
Run Code Online (Sandbox Code Playgroud)

我的输出列应如下

A   B   C   D   Output_col
1   0   0   0   A
0   1   0   0   B
0   0   1   0   C
1   0   1   0   A_C
1   1   1   0   A_B_C
0   0   1   1   C_D
Run Code Online (Sandbox Code Playgroud)

我当然可以使用下面的代码来实现这一点,但是我必须对每一列都做到这一点。

test['Output_col'] = test.A.apply(lambda x: A if x > 0 else 0)
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种方法可以在我有很多列的情况下不应用每一列而实现这一目标。

提前致谢 !!

ans*_*sev 5

使用DataFrame.apply+ join。使用x.index请注意axis = 1使用的)+ boolean indexing与选择列名称Series.eq来过滤选定的列:

test['Output_col']=test.apply(lambda x: '_'.join(x.index[x.eq(1)]),axis=1)
print(test)
Run Code Online (Sandbox Code Playgroud)
   A  B  C  D Output_col
0  1  0  0  0          A
1  0  1  0  0          B
2  0  0  1  0          C
3  1  0  1  0        A_C
4  1  1  1  0      A_B_C
5  0  0  1  1        C_D
Run Code Online (Sandbox Code Playgroud)

要仅应用列列表:

my_list_columns=['enter element of your list']
test['Output_col']=test[my_list_columns].apply(lambda x: '_'.join(x.index[x.eq(1)]),axis=1)
print(test)
Run Code Online (Sandbox Code Playgroud)

所有列的大小写均为0

my_list_columns=['A','B','C','D']
df['Output_col']=df[my_list_columns].apply(lambda x: '_'.join(x.index[x.eq(1)])  if x.eq(1).any() else 'no_value',axis=1)
print(df)

   A  B  C  D Output_col
0  1  0  0  0          A
1  0  0  0  0   no_value
2  0  0  1  0          C
3  1  0  1  0        A_C
4  1  0  1  0        A_C
5  0  0  1  1        C_D
Run Code Online (Sandbox Code Playgroud)