我有一个数据框:

    refid   col2    price1  factor1 price2  factor2 price3  factor3
  0   1       a      200       1      180     3     150       10
  1   2       b      500       1      450     3     400       10
  2   3       c      700       1      620     2     550        5

我需要得到这个输出:

   refid    col2    price   factor
0   1        a      200       1
1   1        b      500       1
2   1        c      700       1
3   2        a      180       3
4   2        b      450       3
5   2        c      620       2
6   3        a      150       10
7   3        b      400       10
8   3        c      550       5

现在我正在try 使用df.熔化方法,但无法使其工作,这是代码和当前结果:

df2_melt = df2.melt(id_vars=["refid","col2"],
        value_vars=["price1","price2","price3",
                   "factor1","factor2","factor3"],
        var_name="Price", 
        value_name="factor")



    refid   col2    price   factor
0       1   a      price1   200
1       2   b      price1   500
2       3   c      price1   700
3       1   a      price2   180
4       2   b      price2   450
5       3   c      price2   620
6       1   a      price3   150
7       2   b      price3   400
8       3   c      price3   550
9       1   a      factor1  1
10      2   b      factor1  1
11      3   c      factor1  1
12      1   a      factor2  3
13      2   b      factor2  3
14      3   c      factor2  2
15      1   a      factor3  10
16      2   b      factor3  10
17      3   c      factor3  5

推荐答案

由于您有一个带有常见前缀的宽数据帧,因此可以使用wide_to_long:

out = pd.wide_to_long(df, stubnames=['price','factor'], 
                      i=["refid","col2"], j='num').droplevel(-1).reset_index()

输出:

   refid col2  price  factor
0      1    a    200       1
1      1    a    180       3
2      1    a    150      10
3      2    b    500       1
4      2    b    450       3
5      2    b    400      10
6      3    c    700       1
7      3    c    620       2
8      3    c    550       5

请注意,您的预期输出有一个错误,其中factorrefid不对齐.

Python-3.x相关问答推荐

将Trio与基于线程的事件侦听器混合使用

CONNEXION.EXCEPTIONS.ResolverError:运行pyz文件时未命名模块

Django 3.2/Django-cms 3.11:查找错误:型号帐户.客户用户未注册

Pandas -我们如何在一行中应用多个要求

如何定义部署用 Python 编写的 Firestore 第二代函数的区域/位置?

如何将日期时间索引写入日期类型的表?

计算文档中所有关键字(单词和多词)出现的频率

安装没有 sudo 权限的 python3 和 pip3

如何在 Telethon 中向机器人发送发送表情符号

如何通过 GitLab V4 api 列出 gitlab 项目中的所有项目变量

Pygame 错误地渲染等距图像

`pyspark mllib` 与 `pyspark ml` 包

使用 Python 解析 JSON 嵌套字典

如何将具有多个参数的函数传递给 python concurrent.futures.ProcessPoolExecutor.map()?

解包时是否可以指定默认值?

python 3集合中的Discard()和Remove()函数有什么区别

如何通过python打开文件

Python3 的超级和理解-> TypeError?

TypeError:列表索引必须是整数或切片,而不是列表

无论如何我可以在 Google colaboratory 中下载文件吗?