Python 使用已知值和限制值绘制阵列特征的直方图

Python 使用已知值和限制值绘制阵列特征的直方图,python,pandas,dataframe,matplotlib,Python,Pandas,Dataframe,Matplotlib,“我的数据框”中名为“宠物”的列基本上是宠物列表的一个功能: ["dog"] ["dog", "cat"] ["cat", "parrot"] ["dog", "cat", "fish"] 可能的宠物:[“狗”、“猫”、“鹦鹉”、“鱼”] 我想绘制一个列的柱状图,以便为每只宠物计算特征值列表中的每只宠物。 在这种情况下: #dog = 3 #cat = 2 #parrot = 1 #fish = 1 怎么做的 我认为可以将特征展平为4个布尔特征,然后绘制这些特

“我的数据框”中名为“宠物”的列基本上是宠物列表的一个功能:

["dog"]  
["dog", "cat"]  
["cat", "parrot"]  
["dog", "cat", "fish"]  
可能的宠物:
[“狗”、“猫”、“鹦鹉”、“鱼”]

我想绘制一个列的柱状图,以便为每只宠物计算特征值列表中的每只宠物。
在这种情况下:

#dog = 3  
#cat = 2  
#parrot = 1  
#fish = 1  
怎么做的

我认为可以将特征展平为4个布尔特征,然后绘制这些特征,但这似乎不是“正确”的解决方案

df['pets'].head()
--
0[“狗”]
1[“狗”、“猫”]
2[“猫”、“鹦鹉”]
3[“狗”、“猫”、“鱼”]
名称:宠物,数据类型:对象
我希望直方图中的每一列都计算所有宠物的数量,这样直方图的总大小(高度/计数之和)就可能大于条目的数量(在上面的示例中,有4个条目,但直方图的大小应该是1+2+2+3=8)


编辑:是否可以重复某些条目,或展平这些条目以获得单值特征? 例如,上述内容将变成:

df['pets'].head()
--
0   "dog"  
1   "dog"
2   "cat"  
3   "cat"  
4   "parrot"    
5   "dog"  
6   "cat"  
7   "fish"  
Name: pets, dtype: object

我认为您需要将值展平,然后通过以下方式绘制:

编辑:如果需要多个列,请重复另一个列的值,因此首先创建DataFrame,并根据和重塑为原始:

print (df)
                       col   A
0                  ["dog"]   3
1          ["dog", "cat"]    7
2        ["cat", "parrot"]  10
3  ["dog", "cat", "fish"]    2

import ast

a = (pd.DataFrame(df.pop('col').apply(ast.literal_eval).values.tolist())
       .stack()
       .reset_index(level=1, drop=True)
       .rename('col'))
print (a)

0       dog
1       dog
1       cat
2       cat
2    parrot
3       dog
3       cat
3      fish
Name: col, dtype: object

然后是可能的用途:

df['col'].value_counts().plot.bar()

谢谢!这对于绘制柱状图非常有用!但是,我希望稍后使用这些条目来查找与其他列的相关性,因此在这种情况下,将它们放在原始数据框中是必要的。@Jes-
ast.literal\u eval
是必要的吗?
df = df.join(a).reset_index(drop=True)
print (df)
    A     col
0   3     dog
1   7     dog
2   7     cat
3  10     cat
4  10  parrot
5   2     dog
6   2     cat
7   2    fish
df['col'].value_counts().plot.bar()