Pandas value_counts()只有一列的堆栈

时间:2017-10-28 20:06:00

标签: python sql pandas dataframe

我想了解每个品牌的设备数量。实际上,堆栈()。 Value_counts()方法是正确的,但它也计算它不应该计算的列。它以某种方式预期两列并返回它们。

import pandas as pd
from sqlalchemy import create_engine # database connection

disk_engine = create_engine('sqlite://gender-age-train.db')

phones = pd.read_sql_query('SELECT device_id, phone_brand FROM gender_age_brand_train', disk_engine)

print phones.stack().value_counts()

输出:

小米                      17336
三星                      13706
华为                      13001
OPPO                     5802
vivo                     5658
魅族                       4710
酷派                       3349
联想                       2695
金立                       1124
HTC                      1015
中兴                        861
乐视                        760
索尼                        717
努比亚                       484
LG                        333
中国移动                      275
TCL                       222
朵唯                        213
海信                        204
优米                        192
锤子                        191
一加                        174
语信                        170
天语                        159
奇酷                        140
摩托罗拉                      103
酷比                         67
酷比魔方                       64
华硕                         59
美图                         57
                        ...  
-8865310564646824401        1
8985202332281820721         1
-5322234356626416887        1
880050530112722484          1
-4671567474474098396        1
3635321738417886774         1
-632936314824337863         1
-1422720271682152902        1
-2873804282202335925        1
3654370499756512829         1
-6683814535312746946        1
-339536654867409365         1
-6550235263773354456        1
-576216080894831095         1
7567434598341760535         1
8744410044312016395         1
8050431495959696911         1
-1419919517746506224        1
1300102583374534161         1
7324848588154164755         1
1622918197035226644         1
4016294717867992903         1
-4702856771680607231        1
-2474276408301741600        1
4390245982607697285         1
8161044391542216225         1
-6548201155232442846        1
-2950848600346765789        1
2164451555009058340         1
1586233736345944064         1
Length: 74765, dtype: int64

实际上它应该只计算品牌列。所以停在哪里...然后来。我尝试了很多但没有成功。

1 个答案:

答案 0 :(得分:0)

您可以使用:

#extract only column for count from db
phones = pd.read_sql_query('SELECT phone_brand FROM gender_age_brand_train', disk_engine)
#select only column for count from df
print phones['phone_brand'].value_counts()

我认为如果需要按phone_brand s计算device_id,我可以使用groupbyvalue_countssizecount

#count and sort values
print phones.groupby('device_id')['phone_brand'].value_counts().reset_index()

或者:

#count also NaNs and not sort
print phones.groupby(['device_id','phone_brand']).size().reset_index()

或者:

#NOT count NaNs and not sort
print phones.groupby(['device_id','phone_brand']).count().reset_index()