SQL查询1 col& pandas数据帧为10行cols& 100行1000行

时间:2016-02-13 14:35:21

标签: python sql pandas dataframe

在这个棘手的问题上,我需要你的帮助。我有一个SQL查询结果,包含一列和1000行。这个SQL查询实际上是一个表上的自连接查询,1000实际上是10个相同的100个id entityName() t使用pandas.pivot,因为我没有唯一索引。

EDIT1:

我想做的一个例子。

SQL查询结果

1列和行N1到N1000

必要的数据框

列:Column1 / Column2 / Column3 / Column4 /(依此类推)

行:N1到N100 / N101到N200 / N201到N300 / N301到N400 /(依此类推)

EDIT2: 一个带有值的小例子.SQL查询基于5人及其年龄的表上的自联接。查询中的值是每次两个人之间的年龄差异。

SQL查询

年龄差异

N1(=人1和人1之间的年龄差异)

N2(=人1和人2之间的年龄差异)

N3(=人1和人3之间的年龄差异)

N4(=人1和人4之间的年龄差异)

N5(=人1和人5之间的年龄差异)

N6(=人2和人1之间的年龄差异)

N7(=人2和人2之间的年龄差异)

N8(=人2和人3之间的年龄差异)

N9(=人2和人4之间的年龄差异)

N10(=人2和人5之间的年龄差异)

...

N25(=人5和人5之间的年龄差异)

必要的数据框

PERSON1 ----的 PERSON2 -----的 Person3可能 -----的 Person4 - ----的 Person5

N1 ------------- ------------- N6 N11 N16 ------------- ---- --------- N21

N2 ------------- ------------- N7 N12 N17 ------------- ---- --------- N22

N3 ------------- ------------- N8 N13 N18 ------------- ---- --------- N23

N4 ------------- ------------- N9 N14 N19 ------------- ---- --------- N24

N5 ------------- ------------ N10 N15 N20 ------------- ----- -------- N25

1 个答案:

答案 0 :(得分:1)

很难理解你的任务,但这里有一个简单的例子,它给你一个开头的想法:

>>> import sqlite3
>>> conn = sqlite3.connect(':memory:')
>>> conn.execute('create table test (id int, value int)')
>>> conn.execute('insert into test select 1, 1 union all select 2, 2')
>>> df = pd.read_sql('select t1.id, t2.id, t1.value * t2.value from test as t1 cross join test as t2', conn)
>>> df
   id1  id2  value
0    1    1      1
1    1    2      2
2    2    1      2
3    2    2      4
>>> df.columns = ['id1','id2','value']
>>> df.pivot(index='id1', columns='id2')
    value   
id2     1  2
id1         
1       1  2
2       2  4

修改

>>> conn.execute('insert into ages select 6 union all select 24 union all select 14 union all select 16 union all select 65')
>>> df = pd.read_sql('select t1.age - t2.age from ages as t1 cross join ages as t2', conn)
>>> df.column = ['diff']
>>> a = pd.DataFrame.from_records(product(range(5), range(5)), columns=['a','b'])
>>> res = pd.concat([df, a],axis=1)
>>> res.pivot(index='a', columns='b', values='diff')
b   0   1   2   3   4
a                    
0   0 -18  -8 -10 -59
1  18   0  10   8 -41
2   8 -10   0  -2 -51
3  10  -8   2   0 -49
4  59  41  51  49   0