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