在这个棘手的问题上,我需要你的帮助。我有一个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
答案 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