首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python Transpose/Stack多列

Python Transpose/Stack多列
EN

Stack Overflow用户
提问于 2021-08-05 02:08:14
回答 1查看 52关注 0票数 1

有很多人会回复三个问题。

这三个问题被问了很多次,问题是新的答复被记录为新的栏目。

理想情况下,输出类似于以下内容:

一直在探索熊猫体内的融化。

代码语言:javascript
复制
pd.melt(df, id_vars=['PersonID'], value_vars=['Q1', 'Q1_1', 'Q1_2', 'Q1_999' ] )

寻找更优雅的解决方案,然后列出value_vars Q1 to Q1_999

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-05 02:18:38

只要稍微重命名一下,就可以在基本stubnames中添加一个后缀,我们可以使用pd.wide_to_long

代码语言:javascript
复制
# Add Suffix to base Q1 Q2 Q3
df = df.rename(columns=dict(zip(['Q1', 'Q2', 'Q3'],
                                ['Q1_0', 'Q2_0', 'Q3_0'])))

# Wide To Long
df = pd.wide_to_long(
    df,
    i='PersonID',
    stubnames=['Q1', 'Q2', 'Q3'],
    j='Attempt',
    sep='_'
).sort_index().reset_index()  # Order by PersonID instead of Attempt 

一些样本数据和Ouptut:

代码语言:javascript
复制
import pandas as pd

df = pd.DataFrame({
    'PersonID': [1, 2, 3, 4, 5],
    'Q1': [232, 415, 152, 123, 234],
    'Q2': [2, 241, 5, 5, 5, ],
    'Q3': ['Yes', 'Yes', 'Yes', 'No', 'Yes'],
    'Q1_1': [10, 11, 12, 13, 14],
    'Q2_1': [15, 16, 17, 18, 19],
    'Q3_1': ['a', 'b', 'c', 'd', 'e'],
    'Q1_2': [20, 21, 22, 23, 24],
    'Q2_2': [25, 26, 27, 28, 29],
    'Q3_2': ['f', 'g', 'h', 'i', 'j']
})

从宽到长直接传递重命名的结果:

代码语言:javascript
复制
df = pd.wide_to_long(
    df.rename(columns=dict(zip(['Q1', 'Q2', 'Q3'],
                               ['Q1_0', 'Q2_0', 'Q3_0']))),
    i='PersonID',
    stubnames=['Q1', 'Q2', 'Q3'],
    j='Attempt',
    sep='_'
).sort_index().reset_index()

输出:

代码语言:javascript
复制
    PersonID  Attempt   Q1   Q2   Q3
0          1        0  232    2  Yes
1          1        1   10   15    a
2          1        2   20   25    f
3          2        0  415  241  Yes
4          2        1   11   16    b
5          2        2   21   26    g
6          3        0  152    5  Yes
7          3        1   12   17    c
8          3        2   22   27    h
9          4        0  123    5   No
10         4        1   13   18    d
11         4        2   23   28    i
12         5        0  234    5  Yes
13         5        1   14   19    e
14         5        2   24   29    j
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68659794

复制
相关文章

相似问题

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