python - Pandas 拆分列字符串并绘制唯一值

标签 python pandas plot bar-chart

我有一个如下所示的数据框 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')

我明白了这个情节

enter image description here

这是不正确的,因为它没有将国家分开。我的目标是获得一个条形图,绘制列中每个国家/地区的计数,但要实现这一点,首先我必须以某种方式拆分每行中的字符串(如果需要),然后绘制数据。我知道我可以使用 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/

相关文章:

html - PlotlyJS.jl "savehtml"未定义

python - C 程序内存违规依赖于 std::cout (?)

python - 如何从 python 导入路径中永久删除路径

python - 如何在单元测试中停止来自 subprocess.check_call() 的 AssertionError 消息

c++ - Python 导入和使用单元格(带有 linux .so 文件)

python - 漂亮地打印 Pandas 数据框

python - 加快 pandas 查找速度

python - 根据指数分布生成数据

python - 如何在Python中将日期列绘制为x轴并绘制y轴上的数据

R: `plot.ts()` ylab 中的希腊字母