360

複数のデータベース ( OracleSQL Serverなど)があるため、データベースの代替として Pandas を使用していますが、一連のコマンドを SQL に相当するものにすることができません。

いくつかの列を含む DataFrame にテーブルがロードされています。

YEARMONTH, CLIENTCODE, SIZE, etc., etc.

SQL では、1 年あたりのさまざまなクライアントの数をカウントするには、次のようにします。

SELECT count(distinct CLIENTCODE) FROM table GROUP BY YEARMONTH;

そして結果は

201301    5000
201302    13245

パンダでそれを行うにはどうすればよいですか?

4

10 に答える 10

536

これがあなたが望むものだと思います:

table.groupby('YEARMONTH').CLIENTCODE.nunique()

例:

In [2]: table
Out[2]: 
   CLIENTCODE  YEARMONTH
0           1     201301
1           1     201301
2           2     201301
3           1     201302
4           2     201302
5           2     201302
6           3     201302

In [3]: table.groupby('YEARMONTH').CLIENTCODE.nunique()
Out[3]: 
YEARMONTH
201301       2
201302       3
于 2013-03-14T14:09:06.103 に答える
123

これは別の方法で、はるかに簡単です。daatデータフレーム名がで、列名が であるとしましょうYEARMONTH:

daat.YEARMONTH.value_counts()
于 2017-07-02T11:16:54.497 に答える
17

私も使っていますが、集約関数などnuniqueを使わないといけない場合はとても助かります。'min', 'max', 'count' or 'mean'

df.groupby('YEARMONTH')['CLIENTCODE'].transform('nunique') #count(distinct)
df.groupby('YEARMONTH')['CLIENTCODE'].transform('min')     #min
df.groupby('YEARMONTH')['CLIENTCODE'].transform('max')     #max
df.groupby('YEARMONTH')['CLIENTCODE'].transform('mean')    #average
df.groupby('YEARMONTH')['CLIENTCODE'].transform('count')   #count
于 2019-08-01T09:38:19.670 に答える