我想了解每个品牌的设备数量。实际上,堆栈()。 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
实际上它应该只计算品牌列。所以停在哪里...然后来。我尝试了很多但没有成功。
答案 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
,我可以使用groupby
和value_counts
,size
或count
:
#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()