Python 将几列合并为一列
我有一个这样的数据框(我正在尝试调整它,因为它是西班牙语的,复制粘贴没有帮助) 所以,许多专栏实际上是对同一个问题的回答,只是不同的选择。我想做的是这样的合并:Python 将几列合并为一列,python,pandas,merge,Python,Pandas,Merge,我有一个这样的数据框(我正在尝试调整它,因为它是西班牙语的,复制粘贴没有帮助) 所以,许多专栏实际上是对同一个问题的回答,只是不同的选择。我想做的是这样的合并: Question 1 Question 2 0 yes NaN 1 None Uber 2 NaN Didi 也就
Question 1 Question 2
0 yes NaN
1 None Uber
2 NaN Didi
也就是说,以某种方式将每个问题的所有答案汇总到一列中(前提是所有答案都是互斥的)。给每一个都加上标签会更好。我相信for循环可以做到这一点,但我在实现它方面非常糟糕,强烈建议不要在python中使用循环。您可以使用从列中提取问题部分,然后groupby
沿着轴=1
提取的系列上的数据帧,并使用first
进行聚合:
g = df.columns.str.extract(r'(Question \d+)', expand=False)
out = df.groupby(g, axis=1).first()
结果:
Question 1 Question 2
0 yes NaN
1 None Uber
2 NaN Didi
试试这个:
(pd.wide_to_long(df.reset_index(), ['Question 1', 'Question 2'], 'index', 'Option', sep=' ', suffix='.*')\
.dropna(how='all')
.max(level=1)
.reset_index())
输出:
Option Question 1 Question 2
0 opt. C yes NaN
1 opt. A NaN Uber
2 opt. B None NaN
Question 1 opt. A Question 1 opt. B Question 1 opt. C Question 2 opt. A Question 2 opt. B
0 NaN NaN yes NaN NaN
1 NaN NaN NaN Uber NaN
2 NaN NaN NaN Didi NaN
Question 1 opt. A Question 1 opt. B Question 1 opt. C Question 2 opt. A Question 2 opt. B Question 1 Question 2
0 yes yes
1 Uber Uber
2 Didi Didi
使用fillna将None和NaN替换为emtpy字符串。然后 rest是简单的连接 代码: 输出:
Option Question 1 Question 2
0 opt. C yes NaN
1 opt. A NaN Uber
2 opt. B None NaN
Question 1 opt. A Question 1 opt. B Question 1 opt. C Question 2 opt. A Question 2 opt. B
0 NaN NaN yes NaN NaN
1 NaN NaN NaN Uber NaN
2 NaN NaN NaN Didi NaN
Question 1 opt. A Question 1 opt. B Question 1 opt. C Question 2 opt. A Question 2 opt. B Question 1 Question 2
0 yes yes
1 Uber Uber
2 Didi Didi
当选项不是相互排斥时会发生什么?你用环做过什么?他们被劝阻了,但是没有什么比循环更能显示你的真正意图了。看看使用
pd.wide\u to\u long
。我真的很不擅长循环。所以我只想了一下。我没有得到任何有意义的回答。很好的回答+你好吗,我的朋友?保持安全和健康?谢谢。我很好。祝你圣诞快乐,新年快乐:)在这里使用wide\u to\u long
真是个好主意。。