Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在另一个字段中将行值作为列与group by区分_Python_Mysql_Sql_Pivot_Dynamic Pivot - Fatal编程技术网

Python 在另一个字段中将行值作为列与group by区分

Python 在另一个字段中将行值作为列与group by区分,python,mysql,sql,pivot,dynamic-pivot,Python,Mysql,Sql,Pivot,Dynamic Pivot,我有贷款数据,我想按日期的月份分组,并通过不同的产品获得金额 我的数据是这样的 disbursementdate | amount | product | cluster 2017-01-01 | 1000 | HL | West 2018-02-01 | 1000 | PL | East Month | HL | PL January 2018 | 1000 | 0 February 20

我有贷款数据,我想按日期的月份分组,并通过不同的产品获得金额

我的数据是这样的

disbursementdate | amount | product | cluster
2017-01-01       | 1000   | HL      | West
2018-02-01       | 1000   | PL      | East
   Month            | HL   | PL
   January 2018     | 1000 | 0
   February 2018    | 100  | 1000
因此,在查询之后,我理想地希望结果如下所示

disbursementdate | amount | product | cluster
2017-01-01       | 1000   | HL      | West
2018-02-01       | 1000   | PL      | East
   Month            | HL   | PL
   January 2018     | 1000 | 0
   February 2018    | 100  | 1000
请注意,可能会有更多的产品,无法知道有多少独特的。。。所以,当我们不工作的时候


我正在努力进行查询

您可以使用Pandas和专门构建的方法:


例如,您可以在mysql中通过构建要执行的代码来实现这一点

DROP TABLE IF EXISTS T;
CREATE TABLE T(disbursementdate DATE, amount INT, product VARCHAR(2), cluster VARCHAR(4));
INSERT INTO T VALUES
('2017-01-01'       , 1000   , 'HL'    ,   'West'),
('2017-01-01'       , 1000   , 'OL'    ,   'West'),
('2018-02-01'       , 1000   , 'PL'    ,   'East'),
('2018-02-01'       , 100    , 'HL'    ,   'West'),
('2018-02-01'       , 1000   , 'HL'    ,   'West');


SET @SQL = 

(SELECT CONCAT('SELECT DISBURSEMENTDATE,',
GROUP_CONCAT(CONCAT('SUM(CASE WHEN PRODUCT = ', CHAR(39),S.PRODUCT, CHAR(39),' THEN AMOUNT ELSE 0 END) AS ',S.PRODUCT))
,' FROM T GROUP BY DISBURSEMENTDATE;')
FROM 
(SELECT DISTINCT PRODUCT FROM T) S
)
;

PREPARE SQLSTMT FROM @SQL;
EXECUTE SQLSTMT;
DEALLOCATE PREPARE SQLSTMT;

+------------------+------+------+------+
| DISBURSEMENTDATE | HL   | OL   | PL   |
+------------------+------+------+------+
| 2017-01-01       | 1000 | 1000 |    0 |
| 2018-02-01       | 1100 |    0 | 1000 |
+------------------+------+------+------+
2 rows in set (0.00 sec)

你是如何得到2018年2月HL=100的?@jpp。。。只是使用了虚拟值。提供与输入一致的所需输出是个好主意。否则,您将混淆试图帮助您的人和未来的访问者。