我在来自 sql 查询的 Pandas DataFrame 中有以下数据:
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
?
最佳答案
可以用groupby size然后nlargest的方法:
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
现在你可以画图了......
关于python - 使用其他列的所有数据绘制列中出现次数最多的 (n) 个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47296180/