Python 将列值追加到dataframe中同一行的新单元格中

Python 将列值追加到dataframe中同一行的新单元格中,python,pandas,data-manipulation,Python,Pandas,Data Manipulation,我有一个csv文件,其中包含列名称,子部分a,子部分b,子部分c,子部分d,段和性别。我想创建一个新的列classes,其中所有的类(sub-columns)由每个学生使用的逗号分隔 实现这一点最简单的方法是什么 结果数据框应如下所示: +------+-------+-------+-------+-------+---------+--------+---------------------+ | name | sub_a | sub_b | sub_c | sub_d | segment

我有一个csv文件,其中包含列
名称
子部分a
子部分b
子部分c
子部分d
性别
。我想创建一个新的列
classes
,其中所有的类(
sub
-columns)由每个学生使用的逗号分隔

实现这一点最简单的方法是什么

结果数据框应如下所示:

+------+-------+-------+-------+-------+---------+--------+---------------------+
| name | sub_a | sub_b | sub_c | sub_d | segment | gender | classes             |
+------+-------+-------+-------+-------+---------+--------+---------------------+
| john | 1     | 1     | 0     | 1     | 1       | 0      | sub_a, sub_b, sub_d |
+------+-------+-------+-------+-------+---------+--------+---------------------+
| mike | 1     | 0     | 1     | 1     | 0       | 0      | sub_a, sub_c, sub_d |
+------+-------+-------+-------+-------+---------+--------+---------------------+
| mary | 1     | 1     | 0     | 1     | 1       | 1      | sub_a, sub_b, sub_d |
+------+-------+-------+-------+-------+---------+--------+---------------------+
| fred | 1     | 0     | 1     | 0     | 0       | 0      | sub_a, sub_c        |
+------+-------+-------+-------+-------+---------+--------+---------------------+
您可以与轴=1一起使用

例如:如果您的数据帧

df
A_A_b_b_c
0    1    0    0    1
1    0    1    0    1
2    1    0    1    0
你能行

df['classes']=df.apply(lambda x:','.join(df.columns[x==1]),axis=1)
df
A_A_b_b_c类
01 01 A_A,B_c
10101a_b,b_c
2 1 0 1 0 A_A,B_B
要对特定列应用
,可以先使用


您确实希望遍历这些行。但是,您不能直接将类添加到数据帧,因为数据帧的所有列都需要等长。所以诀窍是首先生成列,然后再添加它:

subjects=['subc_a','subc_b','subc_c']
每名学生的班级[]#空列
对于df.iterrows()中的学生:
#首先创建该学生参加的课程列表
班级=[SUBK代表科目中的SUBK,如果学生[SUBK]]
#创建单个字符串
类=','。连接(类)
#附加到正在施工的柱上
每个学生的班级。附加(班级)
#最后,将列添加到数据帧中
df['classes']=每个学生的班级

让我们试试
dot

s=df.filter(like='sub')
df['classes']=s.astype(bool).dot(s.columns+',').str[:-1]

您可以仅在
子列上使用
apply
,以应用lambda函数,该函数将连接
子列的名称,其中列的值等于1:

sub_cols = ['sub_a', 'sub_b', 'sub_c', 'sub_d']
df['classes'] = df[sub_cols].apply(lambda x: ', '.join(df[sub_cols].columns[x == 1]), axis=1)

你能把excel作为文本发布到这里吗?整体复制和粘贴,然后将其格式化为代码block@Datanovice我编辑了我的问题。嘿@Dishin,如果我还有其他列也有0-1的值,我忘了指出。我的错。我的错是我忘了指出我的数据帧有0-1个值的列。我该怎么处理呢?@tacoisdelicious在dot之前过滤
sub_cols = ['sub_a', 'sub_b', 'sub_c', 'sub_d']
df['classes'] = df[sub_cols].apply(lambda x: ', '.join(df[sub_cols].columns[x == 1]), axis=1)