2017-01-10 5 views
2

パンダのSQLのウィンドウ関数に相当するものはありますか?例えば、パンダでこれと同等のものを書くための最もコンパクトな方法何?:SQLのウィンドウ関数に相当するパンダ

SELECT state_name, 
     state_population, 
     SUM(state_population) 
     OVER() AS national_population 
FROM population 
ORDER BY state_name 

それともこれが最初のSQLについては

SELECT state_name, 
     state_population, 
     region, 
     SUM(state_population) 
     OVER(PARTITION BY region) AS regional_population 
FROM population  
ORDER BY state_name 
+1

文書が存在し、見つけたり使用したりすることは困難ではありません。 http://pandas.pydata.org/pandas-docs/stable/computation.html#window-functions –

+0

サンプルデータセットと希望のデータセットを提供できますか? – MaxU

+0

@JackManey、AFAIKそれは全く同じではありません - 少なくとも言及したSQLの場合... – MaxU

答えて

6

を?::

SELECT state_name, 
     state_population, 
     SUM(state_population) 
     OVER() AS national_population 
FROM population 
ORDER BY state_name 

パンダ:

df.assign(national_population=df.state_population.sum()).sort_values('state_name') 

SQL:

SELECT state_name, 
     state_population, 
     region, 
     SUM(state_population) 
     OVER(PARTITION BY region) AS regional_population 
FROM population  
ORDER BY state_name 

パンダ:

df.assign(regional_population=df.groupby('region')['state_population'].transform('sum')) \ 
    .sort_values('state_name') 

DEMO:

In [238]: df 
Out[238]: 
    region state_name state_population 
0  1  aaa    100 
1  1  bbb    110 
2  2  ccc    200 
3  2  ddd    100 
4  2  eee    100 
5  3  xxx    55 

national_population:

In [246]: df.assign(national_population=df.state_population.sum()).sort_values('state_name') 
Out[246]: 
    region state_name state_population national_population 
0  1  aaa    100     665 
1  1  bbb    110     665 
2  2  ccc    200     665 
3  2  ddd    100     665 
4  2  eee    100     665 
5  3  xxx    55     665 

regional_population:

In [239]: df.assign(regional_population=df.groupby('region')['state_population'].transform('sum')) \ 
    ...: .sort_values('state_name') 
Out[239]: 
    region state_name state_population regional_population 
0  1  aaa    100     210 
1  1  bbb    110     210 
2  2  ccc    200     400 
3  2  ddd    100     400 
4  2  eee    100     400 
5  3  xxx    55     55 
+0

ありがとう、これは私が探していたものです。変換について知りませんでした。 – 2daaa

+1

@ 2daaa、あなたは大歓迎です。 [Pandas:SQLとの比較](http://pandas.pydata.org/pandas-docs/stable/comparison_with_sql.html)を読むことをお勧めします。 – MaxU

関連する問題