преобразовать Pandas Pivot в SQL Pivot (код справки) - PullRequest
0 голосов
/ 06 октября 2018

Это, наверное, очень простые вопросы к SQL-гуру.Но как бы я превратил панду pivas в sql pivot.(обратите внимание: у меня есть огромные данные, хранящиеся в sql), когда я пытался импортировать их в Jupyter Notebook для преобразования в pandas dataframe, он просто этого не делает (ядро Jupyter умирает).

Теперь мне нужнопомогите повернуть в SQL

Вот мои фиктивные данные и решение в pandas

import numpy as np import pandas как pd

create a фиктивные данные

newd = {'year': [2001, 2002, 2005, 2002, 2004, 1999, 1999, 1999, 2012, 2000, 2010, 2005, 2006, 2009, 2009, 
                 2009, 2009, 2010, 2007, 2008, 2009, 2010],
     'tin': [12, 23, 24, 28,30, 12,7, 12, 12, 23, 24, 7, 12, 35, 39,37, 36, 333, 13, 13, 13, 13],
     'ptin': [12, 23, 28, 22, 12, 12,0, 12, 12, 23, 27, 45, 99, 7, 7, 7, 7, 0, 17, 21, 26, 18] }

преобразовать в панд df

newdf=pd.DataFrame(newd)

группировать олово по олову плательщика

df=newdf.groupby(['tin', 'year'])['ptin'].groups
print(list(df))
print(np.unique(newdf['year'].values))

наблюдать распределение в сводной таблице по годам

print(newdf.pivot_table(index='tin', columns='year', values='ptin', aggfunc=len, fill_value=0))
#newdf[newdf['year']==1999]

year  1999  2000  2001  2002  2004  2005  2006  2007  2008  2009  2010  2012
tin                                                                         
7        1     0     0     0     0     1     0     0     0     0     0     0
12       2     0     1     0     0     0     1     0     0     0     0     1
13       0     0     0     0     0     0     0     1     1     1     1     0
23       0     1     0     1     0     0     0     0     0     0     0     0
24       0     0     0     0     0     1     0     0     0     0     1     0
28       0     0     0     1     0     0     0     0     0     0     0     0
30       0     0     0     0     1     0     0     0     0     0     0     0
35       0     0     0     0     0     0     0     0     0     1     0     0
36       0     0     0     0     0     0     0     0     0     1     0     0
37       0     0     0     0     0     0     0     0     0     1     0     0
39       0     0     0     0     0     0     0     0     0     1     0     0
333      0     0     0     0     0     0     0     0     0     0     1     0

1 Ответ

0 голосов
/ 04 января 2019

Вот как создать ваш поддельный набор данных в SQL.(Примечание: данные вставляются в SQL по строкам, а не по столбцам.)

IF OBJECT_ID('fake_data','U') IS NOT NULL 
    DROP TABLE fake_data;
CREATE TABLE fake_data (
    [year] int
    ,[tin] int
    ,[ptin] int
);
INSERT INTO fake_data (
    [year]
    ,[tin]
    ,[ptin]
)
VALUES
    (2001,12,12),(2002,23,23),(2005,24,28),(2002,28,22),(2004,30,12),(1999,12,12)
    ,(1999,7,0),(1999,12,12),(2012,12,12),(2000,23,23),(2010,24,27),(2005,7,45)
    ,(2006,12,99),(2009,35,7),(2009,39,7),(2009,37,7),(2009,36,7),(2010,333,0)
    ,(2007,13,17),(2008,13,21),(2009,13,26),(2010,13,18);

Затем просмотрите образец набора данных:

SELECT * FROM fake_data;

Вот запрос SQL для вашей сводной таблицы.NB. Скобки не всегда необходимы для имен столбцов, но это хорошая идея, если имена столбцов являются зарезервированными словами в SQL (например, «год», функция).

SELECT
    [tin],[1999],[2000],[2001],[2002],[2004],[2005],[2006],[2007],[2008],[2009],[2010],[2012]
FROM 
    fake_data
PIVOT (
    COUNT([ptin])
    FOR [year]
    IN ([1999],[2000],[2001],[2002],[2004],[2005],[2006],[2007],[2008],[2009],[2010],[2012])
) AS myPivotTable
ORDER BY [tin];

Посмотрите на динамический SQL, если вынужно, чтобы заголовки столбцов были результатом запроса, а не собраны вручную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...