这对于sql专家可能是一个非常简单的问题。但是我如何将熊猫枢轴转换为sql枢轴。 (请注意-我有一个很大的数据,存储在sql中),当我尝试将其导入Jupyter Notebook中以转换为pandas数据框时,它只是没有(Jupyter内核死亡)。
现在我需要帮助来进行SQL转换
这是我的熊猫虚拟数据和解决方案
将numpy导入为np 将熊猫作为pd导入
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] }
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
答案 0 :(得分:0)
以下是在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查询。 N.B.列名不一定总是用括号括起来,但是如果您的列名是SQL中的保留字(例如'year',一个函数),则是个好主意。
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。