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()