标签: pivot

如何从 pandas 中的数据透视表生成干净的 DataFrame

我有下一个问题。

例如我在 Pandas 中有下一个 DataFrame

 a  b  c 
'x' 1 100
'y' 2 100
'z' 3 100
Run Code Online (Sandbox Code Playgroud)

现在我想根据列中的值创建a新 DataFrame 的标题,列中的值是我用于索引的b第一行和第一列中的对应值。c目前我使用下一个代码:

import pandas
piv = df.pivot(index='c', columns='a')
new_df = pandas.DataFrame(piv.to_records())
Run Code Online (Sandbox Code Playgroud)

输出对我来说不够合适,因为我有b一个新 DataFrame 的列名称。也许有人可以在这里告诉我一个更好的解决方案来准确获得下一个输出:

index 'x' 'y' 'z'
 100   1   2   3
Run Code Online (Sandbox Code Playgroud)

不应该是一个数据透视表,而只是一个真正的DataFrame。

python pivot pandas

0
推荐指数
1
解决办法
2698
查看次数

具有多列和工作日的 PostgreSQL 交叉表查询

我试图通过对几列进行分组来创建数据透视表:用户 ID、姓名、周数和日期名称。当前的请求没有给出期望的结果。我需要帮助。

这是我的桌子:

user_id name    week_number day_name    price
2       Luc     8           Sunday      10
2       Luc     8           Monday      15
2       Luc     8           Tuesday     8
2       Luc     8           Wednesday   2
2       Luc     8           Thursday    9
2       Luc     8           Friday      9
2       Luc     8           Saturday    11
2       Luc     9           Saturday    1
2       Luc     9           Friday      13
3       Mathieu 8           Sunday      22
3       Mathieu 8           Monday      13
3       Mathieu 8           Tuesday     9
3       Mathieu 8           Wednesday   3
Run Code Online (Sandbox Code Playgroud)

这是我当前的请求:

SELECT *
FROM   crosstab(
'SELECT user_id, …
Run Code Online (Sandbox Code Playgroud)

postgresql grouping pivot pivot-table crosstab

0
推荐指数
1
解决办法
8397
查看次数

从 MySql 中的查询数据透视表中清除空值

我有以下数据集作为 MySql 引擎版本 5.x 中的示例

+-----------+------------+
| name      | occupation |
+-----------+------------+
| Samantha  | Doctor     |
| Julia     | Actor      |
| Maria     | Actor      |
| Meera     | Singer     |
| Ashely    | Professor  |
| Ketty     | Professor  |
| Christeen | Professor  |
| Jane      | Actor      |
| Jenny     | Doctor     |
| Priya     | Singer     |
+-----------+------------+
Run Code Online (Sandbox Code Playgroud)

我想旋转表中的职业列,以便每个名称按字母顺序排序并显示在其相应的职业下方。输出列标题应分别为 Doctor、Professor、Singer 和 Actor。

我试试这个

SELECT CASE occupation WHEN 'Doctor' THEN name END AS Doctor,
       CASE occupation …
Run Code Online (Sandbox Code Playgroud)

mysql sql pivot pivot-table

0
推荐指数
1
解决办法
207
查看次数

在 Postgres 中通过相同的列值将行转换为列

我有一个像这样的表:

id     name    value
--------------------
1      x       100
1      y       200
1      z       300
2      x       10
2      y       abc
2      z       001
3      x       1
...
--------------------
Run Code Online (Sandbox Code Playgroud)

我需要将其转换为类似的东西:

id    x     y     z
---------------------
1     100   200   300
2     10    abc   001
3     1     ...
---------------------
Run Code Online (Sandbox Code Playgroud)

名字已确定。我可以进行多个连接,但我正在寻找更优雅的解决方案。

sql postgresql pivot crosstab

0
推荐指数
1
解决办法
5720
查看次数

为空 Power Query 时向上移动值

目前,我在 Excel 中有一个大表,我想将其与动态下拉列表(级联选项)一起使用。根据您在第一个下拉列表中所做的选择,然后在下一个单元格中,您应该有一个过滤的下拉菜单。此外,任何选项对于所选的主要类别都是唯一的。

我做的第一件事是获取我需要的列并旋转它们,使其看起来与此类似(C 是列名,V 是值。由于任何选项对于任何类别都是唯一的,因此我遇到了空值问题,因为它是大量的行):

C1   | C2   | C3
V1   | null | null
V2   | null | null
null | V3   | null
null | null | V4
null | null | V5
Run Code Online (Sandbox Code Playgroud)

此格式不适用于动态下拉列表,因为它首先显示所有空字段。我的问题是是否有任何方法可以使用电源查询删除空值,以便我可以在第一行中获得所有值,例如:

C1   | C2   | C3
V1   | V3   | V4
V2   | null | V5
null | null | null
null | null | null
null | null | null
Run Code Online (Sandbox Code Playgroud)

我曾尝试使用“填充”或“填充”选项,然后删除重复项但不起作用,因为它多次重复相同的元素,这对最终下拉菜单没有用。

不确定是否有办法完成它,因此非常感谢任何帮助或建议。

提前致谢!

excel null vba pivot powerquery

0
推荐指数
1
解决办法
311
查看次数

MySql 枢轴未知数量的列标题

我有一个 MySql 查询,我想动态地旋转该查询,将公司名称作为列标题,将公司财务字段作为行标题。

目前我有这个:

SELECT Company, TotalRevenue, Overhead, TotalJobCosts, GrossProfit 
FROM comp_financials
Run Code Online (Sandbox Code Playgroud)

这给了我这个:

公司 总收入 高架 总工作成本 毛利
芝加哥最好的建筑 2098001 363750 1424420 673581
琼斯建筑公司 4509458 1067008 2876568 1632890

我希望得到这样的东西:

芝加哥最好的建筑 琼斯建筑公司
总收入 2098001 4509458
高架 363750 1067008
总工作成本 1424420 2876568
毛利 673581 1632890

拥有未知数量的公司及其价值(但通常少于 20 家)。

到目前为止,我已经将公司名称动态显示为列标题,但无法了解如何显示行值(行标题不是必需的)。

SET @@group_concat_max_len = 32000;
SET @sql = NULL;
SELECT  GROUP_CONCAT(DISTINCT
        CONCAT('MAX(CASE WHEN Company = ''',
               Company,
               ''' THEN Company ELSE NULL END) AS ',
               CONCAT('`', Company, '`')
               )) INTO @sql
FROM comp_financials;

SET …
Run Code Online (Sandbox Code Playgroud)

mysql sql pivot dynamic-pivot

0
推荐指数
1
解决办法
636
查看次数

如何同时旋转某些列并重命名列

我有下表,其中包含患者的数据。如果每个患者有超过 1 个与其 ID 相关的代码,则可以多次就诊。该代码还与使用 CriteriaID 列传送的代码组相关联。

DROP TABLE IF EXISTS #df

CREATE TABLE #df 
(
    PTID VARCHAR(10),
    clmid VARCHAR(5),
    clmfrom date,
    Code VARCHAR(5),
    CriteriaID VARCHAR(5)
);

INSERT INTO #df (PTID, clmid, clmfrom, Code, CriteriaID)
VALUES
('X0001', '001', '2021-07-25', 'A1109', '41'),
('X0001', '001', '2021-07-25', 'B1192', '42'),
('X0002', '002', '2021-08-25', 'A1123', '41'),
('X0002', '002', '2021-08-25', 'B2231', '42'),
('X0003', '003', '2021-09-25', 'B2312', '42')

SELECT * FROM #df
Run Code Online (Sandbox Code Playgroud)

我希望我的最终表能够旋转代码并根据 CriteriaID 重命名列。

本质上,我希望我的决赛桌看起来像这样:

CREATE TABLE #finaldf 
(
    PTID VARCHAR(10),
    clmid VARCHAR(5),
    clmfrom date,
    SysCode …
Run Code Online (Sandbox Code Playgroud)

sql sql-server pivot

0
推荐指数
1
解决办法
50
查看次数

SQL:将行转换为列

我需要将行的值转换为列 - 例如:

SELECT s.section_name, 
       s.section_value 
  FROM tbl_sections s
Run Code Online (Sandbox Code Playgroud)

这个输出:

section_name   section_value
-----------------------------
sectionI       One
sectionII      Two
sectionIII     Three
Run Code Online (Sandbox Code Playgroud)

期望的输出:

sectionI      sectionII      sectionIII
-----------------------------------------
One           Two            Three
Run Code Online (Sandbox Code Playgroud)

sql oracle pivot

-1
推荐指数
1
解决办法
1万
查看次数

如何以某种方式在select中做一个循环?

我有这张桌子.

+------+-------+--------+
| CODE | MONTH | AMOUNT |
+------+-------+--------+
|    2 |     1 |    100 |
|    3 |     1 |    200 |
|    2 |     2 |    300 |
|    3 |     2 |    400 |
+------+-------+--------+
Run Code Online (Sandbox Code Playgroud)

而且,这是我想要的结果.

+------+---------+---------+
| CODE |     MO1 |     MO2 |
+------+---------+---------+
|    2 |     100 |     300 |
|    3 |     200 |     400 |
+------+---------+---------+
Run Code Online (Sandbox Code Playgroud)

我知道在select中循环是不可能的.
我想我也许可以使用,CASE但我没有明确的数月,就像我上面的例子,其中只有1月和2月的数据.我将在3月份获得数据.我怎样才能做到这一点?

mysql sql pivot

-1
推荐指数
1
解决办法
104
查看次数

如何在多列上进行透视

我正在尝试创建一个SQL语句,将可变数量的行(最多5个)转换为单行.一小部分数据如下所示:

+--------------+--------+-------+-------+
|      ID      | ItemID | Style |  Qty  |
+--------------+--------+-------+-------+
| 00001-5A-2XL | F911-5 | F911  | 1.566 |
| 00001-5A-2XL | 233-5  | 233   | 0.236 |
| 00001-5A-3XL | F911-5 | F911  | 1.697 |
| 00001-5A-3XL | 233-5  | 233   | 0.237 |
| 00001-5A-4XL | F911-5 | F911  | 1.833 |
| 00001-5A-4XL | 233-5  | 233   | 0.239 |
| 00001-5A-L   | F911-5 | F911  | 1.307 |
| 00001-5A-L   | 233-5  | …
Run Code Online (Sandbox Code Playgroud)

sql pivot sql-server-2005

-1
推荐指数
1
解决办法
78
查看次数