Python 使用熊猫展平测量数据
我必须在Tableau中处理这个调查结果,然后我认为下面的预处理最好使用Python/Pandas组合完成 输入:Python 使用熊猫展平测量数据,python,pandas,Python,Pandas,我必须在Tableau中处理这个调查结果,然后我认为下面的预处理最好使用Python/Pandas组合完成 输入: User Day-1 Day-2 Day-3 1 Good Good Bad 2 Good Ok Ok 3 Good Ok Ok 4 Bad Bad Good 5
User Day-1 Day-2 Day-3
1 Good Good Bad
2 Good Ok Ok
3 Good Ok Ok
4 Bad Bad Good
5 Ok Bad Bad
预期产出:
User Question Answer
1 Day-1 Good
1 Day-2 Good
1 Day-3 Good
2 Day-1 Bad
2 Day-2 Ok
2 Day-3 Good
3 Day-1 Ok
3 Day-2 Ok
3 Day-3 Bad
4 Day-1 Bad
4 Day-2 Bad
4 Day-3 Ok
5 Day-1 Ok
5 Day-2 Good
5 Day-3 Bad
(这是一个虚拟样本。实际的调查有数百天的时间,有许多不同类型的答案。)
有什么直接的解决办法吗 您可以使用pandas.melt将数据从宽格式转换为长格式:
import pandas as pd
pd.melt(df, id_vars="User", var_name = "Question", value_name="Answer")
Out[246]:
User Question Answer
0 1 Day-1 Good
1 2 Day-1 Good
2 3 Day-1 Good
3 4 Day-1 Bad
4 5 Day-1 Ok
5 1 Day-2 Good
6 2 Day-2 Ok
7 3 Day-2 Ok
8 4 Day-2 Bad
9 5 Day-2 Bad
10 1 Day-3 Bad
11 2 Day-3 Ok
12 3 Day-3 Ok
13 4 Day-3 Good
14 5 Day-3 Bad
另一个选项是使用
stack()
:
使用
numpy
pd.DataFrame(dict(
User=df.User.values.repeat(len(df.columns) - 1),
Question=np.tile(df.columns[1:], len(df.index)),
Answer=df.values[:, 1:].ravel()
))[['User', 'Question', 'Answer']]
User Question Answer
0 1 Day-1 Good
1 1 Day-2 Good
2 1 Day-3 Bad
3 2 Day-1 Good
4 2 Day-2 Ok
5 2 Day-3 Ok
6 3 Day-1 Good
7 3 Day-2 Ok
8 3 Day-3 Ok
9 4 Day-1 Bad
10 4 Day-2 Bad
11 4 Day-3 Good
12 5 Day-1 Ok
13 5 Day-2 Bad
14 5 Day-3 Bad
天哪,莫莉,熊猫人在野外已经呆了很长时间了。我没想到这个问题会有一行答案@AjeetGanga嗯。简单易用肯定是它的优势之一,但要掌握所有技巧以达到你想要的目的,仍然需要一些时间和练习。df.values[]。ravel是秘方!
pd.DataFrame(dict(
User=df.User.values.repeat(len(df.columns) - 1),
Question=np.tile(df.columns[1:], len(df.index)),
Answer=df.values[:, 1:].ravel()
))[['User', 'Question', 'Answer']]
User Question Answer
0 1 Day-1 Good
1 1 Day-2 Good
2 1 Day-3 Bad
3 2 Day-1 Good
4 2 Day-2 Ok
5 2 Day-3 Ok
6 3 Day-1 Good
7 3 Day-2 Ok
8 3 Day-3 Ok
9 4 Day-1 Bad
10 4 Day-2 Bad
11 4 Day-3 Good
12 5 Day-1 Ok
13 5 Day-2 Bad
14 5 Day-3 Bad