Isa*_*ley 1 python plot bar-chart pandas
我有一个Df看起来像这样的数据框:
Country Year
0 Australia, USA 2015
1 USA, Hong Kong, UK 1982
2 USA 2012
3 USA 1994
4 USA, France 2013
5 Japan 1988
6 Japan 1997
7 USA 2013
8 Mexico 2000
9 USA, UK 2005
10 USA 2012
11 USA, UK 2014
12 USA 1980
13 USA 1992
14 USA 1997
15 USA 2003
16 USA 2004
17 USA 2007
18 USA, Germany 2009
19 Japan 2006
20 Japan 1995
Run Code Online (Sandbox Code Playgroud)
我想为该Country列制作条形图,如果我尝试这样做
Df.Country.value_counts().plot(kind='bar')
Run Code Online (Sandbox Code Playgroud)
我得到这个情节
这是不正确的,因为它没有将国家分开。我的目标是获得一个条形图,以绘制该列中每个国家的计数,但是要实现这一点,首先,我必须以某种方式在每行中拆分字符串(如果需要),然后绘制数据。我知道我可以Df.Country.str.split(', ')用来分割字符串,但是如果我这样做,我将无法绘制数据。
有人知道如何解决这个问题吗?
您可以使用向量化Series.str.split方法来拆分Countrys:
In [163]: df['Country'].str.split(r',\s+', expand=True)
Out[163]:
0 1 2
0 Australia USA None
1 USA Hong Kong UK
2 USA None None
3 USA None None
4 USA France None
...
Run Code Online (Sandbox Code Playgroud)
如果堆叠此DataFrame以便将所有值移动到单个列中,则可以value_counts像以前一样应用和绘制:
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame(
{'Country': ['Australia, USA', 'USA, Hong Kong, UK', 'USA', 'USA', 'USA, France', 'Japan', 'Japan', 'USA', 'Mexico', 'USA, UK', 'USA', 'USA, UK', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA, Germany', 'Japan', 'Japan'],
'Year': [2015, 1982, 2012, 1994, 2013, 1988, 1997, 2013, 2000, 2005, 2012, 2014, 1980, 1992, 1997, 2003, 2004, 2007, 2009, 2006, 1995]})
counts = df['Country'].str.split(r',\s+', expand=True).stack().value_counts()
counts.plot(kind='bar')
plt.show()
Run Code Online (Sandbox Code Playgroud)
