Python 将多个值合并到新列中的一行

Python 将多个值合并到新列中的一行,python,pandas,csv,Python,Pandas,Csv,问候美丽的人们 我正在为一些客户的欢呼和编辑调查数据进行可视化。不幸的是,整个过程中的数据建模或端到端流程是不存在的 我有多个专栏,如下所示: What Role : Teacher, What Role: Engineer, What Role : Doctor 1 Yes, Yes, No, 2 No, No, Yes, 3, Yes,

问候美丽的人们

我正在为一些客户的欢呼和编辑调查数据进行可视化。不幸的是,整个过程中的数据建模或端到端流程是不存在的

我有多个专栏,如下所示:

    What Role : Teacher, What Role: Engineer, What Role : Doctor
1   Yes,                 Yes,                 No, 
2   No,                  No,                  Yes,
3,  Yes,                 No,                  Yes, 
因此,我要做的是创建一个新列,并将“是”转换为与标题匹配的新值,因此,如果“医生”为“是”,则它将输入一个新列:

    What Role?
1   Teacher, Engineer,
2   Doctor,
3   Teacher, Doctor
这可以通过创建一个字典然后创建一个for循环来实现吗

例如:

import pandas as pd

df = pd.read_csv("file.csv")

Dictionary_File = {'What Role?' : 'What Role : Teacher', 
'What Role?': 'What Role : Engineer', 'What Role?' : 'What Role : Doctor'}

for k,v in Dictionary_File.items():
   (df[k] = df[k] == 'Yes', 'Unsure here' + df[v])

df = df.drop(list(Dictonary_File.values()), axis=1)
因此,当涉及到for循环时,我无法思考或找到将值合并为新值的方法(除了手动将所有列“是”更改为新值,然后合并..?)

任何帮助都将不胜感激


干杯,

您需要首先通过
拆分
删除
什么角色:

然后通过布尔掩码
df==“Yes”
通过

使用

选项1

In [1188]: cols = df.columns.str.split(': ').str[1]

In [1207]: df.eq('Yes').dot(cols + ', ').str[:-2]
Out[1207]:
0    Teacher, Engineer
1               Doctor
2      Teacher, Doctor
dtype: object
选项2

In [1189]: df.eq('Yes').apply(lambda x: ', '.join(cols[x]), 1)
Out[1189]:
0    Teacher, Engineer
1               Doctor
2      Teacher, Doctor
dtype: object

细节

In [1190]: df
Out[1190]:
  What Role : Teacher What Role: Engineer What Role : Doctor
0                 Yes                 Yes                 No
1                  No                  No                Yes
2                 Yes                  No                Yes

第一个解决方案更快,所以第二个方案被删除。我记得当我第一次问这个问题时,不知道代码的意思,最后在一个我觉得完全自然和可读的地方。非常感谢杰兹帮助社区里的新手。谢谢你,伙计!我会试试这个&下面的答案!:)不确定会不会突然遭到否决——这是我真正开始编程的第一周或第二周!我很乐意提出任何改进问题的建议。
In [1190]: df
Out[1190]:
  What Role : Teacher What Role: Engineer What Role : Doctor
0                 Yes                 Yes                 No
1                  No                  No                Yes
2                 Yes                  No                Yes