我有下一个问题。
例如我在 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。
我试图通过对几列进行分组来创建数据透视表:用户 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) 我有以下数据集作为 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) 我有一个像这样的表:
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)
名字已确定。我可以进行多个连接,但我正在寻找更优雅的解决方案。
目前,我在 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)
我曾尝试使用“填充”或“填充”选项,然后删除重复项但不起作用,因为它多次重复相同的元素,这对最终下拉菜单没有用。
不确定是否有办法完成它,因此非常感谢任何帮助或建议。
提前致谢!
我有一个 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) 我有下表,其中包含患者的数据。如果每个患者有超过 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) 我需要将行的值转换为列 - 例如:
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) 我有这张桌子.
+------+-------+--------+
| 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月份获得数据.我怎样才能做到这一点?
我正在尝试创建一个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) pivot ×10
sql ×7
mysql ×3
crosstab ×2
pivot-table ×2
postgresql ×2
excel ×1
grouping ×1
null ×1
oracle ×1
pandas ×1
powerquery ×1
python ×1
sql-server ×1
vba ×1