在Pandas DataFrame中,我从一个sql查询中获得了以下数据:
latin_brands group phone_brand_chinese_match only_latin_brands
0 xiaomi M32-38 小米 xiaomi
1 xiaomi M32-38 小米 xiaomi
2 xiaomi M32-38 小米 xiaomi
3 xiaomi M29-31 小米 xiaomi
4 xiaomi M29-31 小米 xiaomi
5 None F24-26 OPPO OPPO
6 coolpad M32-38 酷派 coolpad
7 xiaomi M32-38 小米 xiaomi
8 None M32-38 vivo vivo
9 samsung F33-42 三星 samsung
10 huawei M29-31 华为 huawei
11 huawei F33-42 华为 huawei
12 samsung F27-28 三星 samsung
13 huawei M32-38 华为 huawei
14 aiyouni M39+ 艾优尼 aiyouni
15 huawei F27-28 华为 huawei
16 xiaomi M32-38 小米 xiaomi
17 xiaomi M32-38 小米 xiaomi
18 meizu M39+ 魅族 meizu
19 xiaomi M32-38 小米 xiaomi
20 samsung F33-42 三星 samsung
21 xiaomi M23-26 小米 xiaomi
22 huawei M23-26 华为 huawei
23 samsung M27-28 三星 samsung
24 xiaomi M29-31 小米 xiaomi
25 samsung M32-38 三星 samsung
26 samsung M32-38 三星 samsung
27 samsung F33-42 三星 samsung
28 samsung M32-38 三星 samsung
29 samsung M32-38 三星 samsung
... ... ... ... ...
74809 huawei M27-28 华为 huawei
74810 None M29-31 TCL TCL
我想要映射两列,并把它画在一个线状图上。我的方法:
phones = phones.groupby(['only_latin_brands', 'group']).size()
phones = phones.unstack()
phones = phones.fillna(0)
phones.head()
phones.plot(kind='line')
plt.show()
我想画出group
和only_latin_brands
之间的关系。
如何才能只绘制最常见的20个only_latin_brands
列和它们的group
?
发布于 2017-11-14 23:05:42
使用@AndyHayden start:
df[df.only_latin_brands.isin(df.groupby('only_latin_brands').size().nlargest(3).index)]\
.groupby(['group','only_latin_brands']).size().unstack().fillna(0)\
.plot(kind='line')
编辑以显示所有组:
df[df.only_latin_brands.isin(df.groupby('only_latin_brands').size().nlargest(3).index)]\
.groupby(['group','only_latin_brands']).size().unstack()\
.reindex(df.group.unique()).fillna(0).plot(kind='line')
发布于 2017-11-14 22:37:45
您可以使用groupby,然后使用then方法:
In [11]: df.groupby("only_latin_brands").size()
Out[11]:
only_latin_brands
OPPO 1
aiyouni 1
coolpad 1
huawei 5
meizu 1
samsung 9
vivo 1
xiaomi 11
dtype: int64
In [12]: df.groupby("only_latin_brands").size().nlargest(2)
Out[12]:
only_latin_brands
xiaomi 11
samsung 9
dtype: int64
然后使用isin过滤掉以下行:
In [13]: df[df["only_latin_brands"].isin(df.groupby("only_latin_brands").size().nlargest(2).index)]
Out[13]:
latin_brands group phone_brand_chinese_match only_latin_brands
0 xiaomi M32-38 小米 xiaomi
1 xiaomi M32-38 小米 xiaomi
2 xiaomi M32-38 小米 xiaomi
3 xiaomi M29-31 小米 xiaomi
4 xiaomi M29-31 小米 xiaomi
7 xiaomi M32-38 小米 xiaomi
9 samsung F33-42 三星 samsung
12 samsung F27-28 三星 samsung
16 xiaomi M32-38 小米 xiaomi
17 xiaomi M32-38 小米 xiaomi
19 xiaomi M32-38 小米 xiaomi
20 samsung F33-42 三星 samsung
21 xiaomi M23-26 小米 xiaomi
23 samsung M27-28 三星 samsung
24 xiaomi M29-31 小米 xiaomi
25 samsung M32-38 三星 samsung
26 samsung M32-38 三星 samsung
27 samsung F33-42 三星 samsung
28 samsung M32-38 三星 samsung
29 samsung M32-38 三星 samsung
现在你可以做剧情了..。
https://stackoverflow.com/questions/47296180
复制相似问题