当前位置: 首页 > 面试题库 >

pandas:取消融化数据框以添加任意数量的列?

胥博文
2023-03-14
问题内容

df在Pandas中有一个数据框,看起来像这样:

stores           product           discount
Westminster      102141            T
Westminster      102142            F
City of London   102141            T
City of London   102142            F
City of London   102143            T

最后,我想得到一个像这样的数据集:

stores           product_1  discount_1 product_2  discount_2 product_3  discount_3
Westminster      102141     T          102143     F       
City of London   102141     T          102143     F          102143     T

如何在熊猫中做到这一点?

我认为这是stores专栏文章的枢纽,但有多个。还是这是“解开”而不是“枢轴”?

我试过了:

df.pivot("stores", ["product", "discount"], ["product", "discount"])

但是我明白了TypeError: MultiIndex.name must be a hashable type


问题答案:

使用DataFrame.unstack的重塑,只有必要时创建计数器通过GroupBy.cumcount,第二级上次更改排序和按列扁平化多指标map

df = (df.set_index(['stores', df.groupby('stores').cumcount().add(1)])
        .unstack()
        .sort_index(axis=1, level=1))
df.columns = df.columns.map('{0[0]}_{0[1]}'.format)
df = df.reset_index()
print (df)
           stores discount_1  product_1 discount_2  product_2 discount_3  \
0  City of London          T   102141.0          F   102142.0          T   
1     Westminster          T   102141.0          F   102142.0        NaN

   product_3  
0   102143.0  
1        NaN


 类似资料:
  • 问题内容: 给定以下形式的方形熊猫DataFrame: 如何能在上三角熔化得到以下形式的矩阵 我对惯用的熊猫解决方案更感兴趣,自定义索引器将很容易手动编写… 预先感谢您的考虑和回应。 问题答案: 首先,我将的较低值转换为by和and ,然后设置列名称:

  • 问题内容: 下面是我的数据框 我想在第一个位置插入新行 姓名:院长,年龄:45,性别:男 在熊猫中做到这一点的最佳方法是什么? 问题答案: 如果要经常进行操作,那么就性能而言,首先将数据收集到列表中然后使用(类似于@Serenity的解决方案)是有意义的: 演示: PS我不会把,,过于频繁(每单排),因为它是相当昂贵。因此,想法是分批进行…

  • 问题内容: 我有一个形状为(X,Y)的Pandas数据框对象,如下所示: 还有一个形状为(X,Z)的numpy稀疏矩阵(CSC),看起来像这样 如何将矩阵中的内容添加到新命名列中的数据框中,以使数据框最终像这样: 请注意,数据框现在具有形状(X,Y + 1),并且矩阵中的行是数据框中的元素。 问题答案: import numpy as np import pandas as pd import s

  • 问题内容: 我有两个熊猫数据框,一个叫做“ orders”,另一个叫做“ daily_prices”。daily_prices如下: 订单如下: 两个数据帧的索引均为datetime.date。通过使用列表解析来遍历所有订单并在“ daily_prices”数据框中查找特定日期的特定报价,然后将该列表作为列添加到“订单”数据框中的“价格”列。 “订单”数据框。我想使用数组操作而不是循环执行此操作。

  • 问题内容: 我想像这样向数据框添加列“ D”: 根据以下字典: 因此结果数据框显示为: 到目前为止,我尝试了该方法,但无法弄清楚它如何与Dictionary一起工作。 问题答案: 调用并传递字典,这将执行查找并返回该键的关联值:

  • 问题内容: 给定一个DataFrame: 添加包含常量值(例如0)的新列的最简单方法是什么? 这是我的解决方案,但我不知道为什么这会将NaN放入“新”列? 问题答案: 之所以将其放入一列中,是因为和您右侧对象的有所不同。@zach显示了分配新的零列的正确方法。通常,尝试使索引尽可能地对齐。一个缺点是,当指数不对准你,无论他们 是不是 一致。尝试使用和方法来获得一些直觉,以便对齐具有部分,完全和未对

  • 问题内容: 案例:我的脚本返回一个数据框,该数据框需要作为新的数据行附加到现有的Google电子表格中。到目前为止,我正在通过gspread将数据框附加为多个单行。 我的代码: 有没有一种方法可以附加整个数据帧而不是多个单行? 问题答案: 我可以推荐:

  • 我有一个熊猫DataFrame,我想通过使用Groupby并根据小时时间增量添加任意数量的列,并从第三列填充数据,将其转换为时间表(出于可视化目的)。 源数据帧可能如下所示: 我的目标是: 我无法得到的是(如果不使用循环手动构造),根据第一个数据帧中的唯一或小时范围添加任意数量的列(在groupby操作之后),然后根据第一个数据帧中的小时和楼层列计算每个列的值。 有什么想法吗?