使用 pandas 绘制图表以仅显示某些值

Plotting a graph with pandas to only display certain values

我创建了一个仅包含另一个数据框的 2 列的数据框:

df1 = df[["BNF Chapter", "Name"]]
df1

这显示了一个包含两列的数据框。我按功能进行了分组,因此对于每一章,例如 1,它显示该特定章节的药物名称

df1.groupby(['BNF Chapter','Name'])['BNF Chapter'].sum()

BNF Chapter  Name
1            Allantoin + Lidocaine                           4
             Aluminium hydroxide                             2
             Aluminium hydroxide + Magnesium trisilicate     2
             Alverine                                        702
21           Polihexanide                                    42

我怎样才能将其绘制在特定于第 1 章的图表上,并在一侧显示药物名称,在图表底部显示规定的次数?

如有任何帮助,我将不胜感激!

任何帮助将不胜感激!! :)

您可以对列执行分组并仍然访问该列 -

df1.groupby(['BNF Chapter','Name'])['BNF Chapter'].sum() 

如果我没理解错的话,你想做的是将特定 BNF 章节的匹配名称聚合到一个集合中?

我正在 this question

中窃取 muon 的答案
# if list of unique items is desired, use set
df.groupby('A',as_index=False)['B'].aggregate(lambda x: set(x))

# if duplicate items are okay, use list
df.groupby('A',as_index=False)['B'].aggregate(lambda x: list(x))

如果您希望框架的行数与章节数一样多,您可以这样做,它会为每个 BNF Chapter.

提供一个名称列表
df1.groupby('BNF Chapter').Name.apply(lambda x: [x])

编辑 对于你关于绘制单个药物(组合)的问题,假设没有太多,你可以做这样的事情——我注意到你说的只是第 1 章。

我假设此命令产生了您问题中显示的输出。 df1.groupby(['BNF Chapter','Name'])['BNF Chapter'].sum()

如果是这样,您可以这样做:

df1.groupby(['BNF Chapter','Name'])['BNF Chapter'].sum().loc['1'].sort_values(ascending=False).plot(kind='barh')

如果 BNF Chapter 不是字符串,请删除引号,使 .loc['1'] 变为 .loc[1]