每个产品在不同商店的价格

表:Products

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| product_id  | int     |
| store1      | int     |
| store2      | int     |
| store3      | int     |
+-------------+---------+
在 SQL 中,这张表的主键是 product_id(产品Id)。
每行存储了这一产品在不同商店 store1, store2, store3 的价格。
如果这一产品在商店里没有出售,则值将为 null。

请你重构 Products 表,查询每个产品在不同商店的价格,使得输出的格式变为(product_id, store, price) 。如果这一产品在商店里没有出售,则不输出这一行。

输出结果表中的 顺序不作要求 。

解题思路:

1.列变行

products = pd.melt(products, id_vars=['product_id'], value_vars=['store1', 'store2', 'store3'], var_name = 'store', value_name='price')
products = products[~products['price'].isna()]

注:

melt() 是 Pandas 中的一个函数,用于将数据框从宽格式(wide format)转换为长格式(long format)。它将数据框中的列名作为标识符变量,并将这些列展开成一个或多个观察值变量。

以下是 melt() 函数的详细解释:

语法:

DataFrame.melt(id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None)

参数:

  • id_vars:可选参数,指定要保留的列,作为标识符变量。这些列不会被展开,默认为 None,表示所有的列都会被展开。
  • value_vars:可选参数,指定要展开的列,默认为 None,表示除了 id_vars 列之外的所有列都会被展开。
  • var_name:可选参数,指定新生成的列的名称,默认为 None,表示使用原始列的名称作为新列的名称。
  • value_name:可选参数,指定新生成的值列的名称,默认为 'value'
  • col_level:可选参数,指定要展开的多级列的级别,默认为 None。

返回值: 返回一个新的数据框,其中包含将原始数据框中的列展开后得到的观察值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值