首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利用Pandas对测量数据进行平整化

利用Pandas对测量数据进行平整化
EN

Stack Overflow用户
提问于 2017-01-21 02:09:27
回答 2查看 409关注 0票数 2

我必须在Tableau中处理这个调查结果,然后我认为使用Python/Pandas组合进行以下预处理是最好的。

输入:

代码语言:javascript
复制
  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

预期产出:

代码语言:javascript
复制
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

(这是假样品。实际调查有数百天,还有很多不同类型的答案。

这有什么直接的解决办法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-21 02:44:54

您可以使用pandas.melt将数据从宽格式转换为长格式:

代码语言:javascript
复制
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()

代码语言:javascript
复制
(df.set_index("User").stack()
   .rename_axis(("User", "Question"))
   .rename("Answer").reset_index())

Out[248]:
  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
票数 3
EN

Stack Overflow用户

发布于 2017-01-21 05:58:09

使用numpy

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41775068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档