我有一个如下所示的数据框 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
如果我尝试这样做,我想为 Country
列制作一个条形图
Df.Country.value_counts().plot(kind='bar')
我明白了这个情节
这是不正确的,因为它没有将国家分开。我的目标是获得一个条形图,绘制列中每个国家/地区的计数,但要实现这一点,首先我必须以某种方式拆分每行中的字符串(如果需要),然后绘制数据。我知道我可以使用 Df.Country.str.split(', ')
来拆分字符串,但如果我这样做,我就无法绘制数据。
有人知道如何解决这个问题吗?
最佳答案
您可以使用向量化的 Series.str.split拆分 Country
的方法:
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
...
如果你stack这个 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()
关于python - Pandas 拆分列字符串并绘制唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35563351/