Pandas 转置到新列
Pandas transpose to new columns
我有以下来自 Microsoft 表单的数据框,我正在使用 Python 从 Sharepoint 网站下载,我需要保存到我们的本地数据库以供进一步分析。
输入方向:
ID Q1 Q2 QN
1 1 1 0
2 1 1 1
3 0 0 1
4 0 1 0
请注意,目前有 50 多列和数百行,但会随着时间的推移而增加。
在将数据发送到 SQL 服务器之前,我想转置数据帧,以便对数据库存储进行规范化。我想要得到的输出如下:
输出方向:
ID Question Answer
1 Q1 1
1 Q2 1
1 QN 0
2 Q1 1
2 Q2 1
2 QN 1
3 Q1 0
3 Q2 0
3 QN 1
4 Q1 0
4 Q2 1
4 QN 0
我知道使用 df.T 简单地将列转换为行我不会得到太多;谁能解决一些可能的方法?
即使使用普通 Python lists/dictionaries 或其他内容,也不一定需要使用 pandas 处理。
谢谢
您可以使用 melt
:
df_new = df.set_index("ID").melt(var_name="Question", value_name="Answer", ignore_index=False).sort_index()
输出:
Question Answer
ID
1 Q1 1
1 Q2 1
1 QN 0
2 Q1 1
2 Q2 1
2 QN 1
3 Q1 0
3 Q2 0
3 QN 1
4 Q1 0
4 Q2 1
4 QN 0
与@anon01 的回答略有不同的方法是在 df.melt
中使用 id_var
参数,而不是显式设置索引 (documentation)。
df.melt('ID', ['Q1','Q2','QN'], 'Question', 'Answer')
ID Question Answer
0 1 Q1 1
1 2 Q1 1
2 3 Q1 0
3 4 Q1 0
4 1 Q2 1
5 2 Q2 1
6 3 Q2 0
7 4 Q2 1
8 1 QN 0
9 2 QN 1
10 3 QN 1
11 4 QN 0
我有以下来自 Microsoft 表单的数据框,我正在使用 Python 从 Sharepoint 网站下载,我需要保存到我们的本地数据库以供进一步分析。
输入方向:
ID Q1 Q2 QN
1 1 1 0
2 1 1 1
3 0 0 1
4 0 1 0
请注意,目前有 50 多列和数百行,但会随着时间的推移而增加。
在将数据发送到 SQL 服务器之前,我想转置数据帧,以便对数据库存储进行规范化。我想要得到的输出如下:
输出方向:
ID Question Answer
1 Q1 1
1 Q2 1
1 QN 0
2 Q1 1
2 Q2 1
2 QN 1
3 Q1 0
3 Q2 0
3 QN 1
4 Q1 0
4 Q2 1
4 QN 0
我知道使用 df.T 简单地将列转换为行我不会得到太多;谁能解决一些可能的方法? 即使使用普通 Python lists/dictionaries 或其他内容,也不一定需要使用 pandas 处理。 谢谢
您可以使用 melt
:
df_new = df.set_index("ID").melt(var_name="Question", value_name="Answer", ignore_index=False).sort_index()
输出:
Question Answer
ID
1 Q1 1
1 Q2 1
1 QN 0
2 Q1 1
2 Q2 1
2 QN 1
3 Q1 0
3 Q2 0
3 QN 1
4 Q1 0
4 Q2 1
4 QN 0
与@anon01 的回答略有不同的方法是在 df.melt
中使用 id_var
参数,而不是显式设置索引 (documentation)。
df.melt('ID', ['Q1','Q2','QN'], 'Question', 'Answer')
ID Question Answer
0 1 Q1 1
1 2 Q1 1
2 3 Q1 0
3 4 Q1 0
4 1 Q2 1
5 2 Q2 1
6 3 Q2 0
7 4 Q2 1
8 1 QN 0
9 2 QN 1
10 3 QN 1
11 4 QN 0