Python 按熊猫图中的每个唯一值计数打印关键点计数

Python 按熊猫图中的每个唯一值计数打印关键点计数,python,plot,pandas,Python,Plot,Pandas,我有一组数据,我想从中绘制每个唯一id计数的键数(x=唯一id计数,y=键计数),我正在尝试学习如何利用熊猫的pandas 在这种情况下: 唯一\u id 1=密钥计数2 唯一\u id 2=密钥计数1 from pandas import * key_items = ("a", "a", "a", "a", "a", "b", "b", "b", "b", "b", "c", "c", "c") id_data = ("X", "X", "X", "X", "X", "X", "X", "Y"

我有一组数据,我想从中绘制每个唯一id计数的键数(x=唯一id计数,y=键计数),我正在尝试学习如何利用熊猫的
pandas

在这种情况下:

唯一\u id 1=密钥计数2

唯一\u id 2=密钥计数1

from pandas import *
key_items = ("a", "a", "a", "a", "a", "b", "b", "b", "b", "b", "c", "c", "c")
id_data = ("X", "X", "X", "X", "X", "X", "X", "Y", "Y", "Y", "X", "X", "X")

df = DataFrame({'keys': key_items, 'ids': id_data})
通过从数据帧中取出数据并对其进行重组,然后重新构建一个新的数据帧,我成功地将数据转换为我想要的内容。在这种情况下,可能最好在python中完成这一切,而不使用pandas

unique_values = defaultdict(list)
for items in df.itertuples(index=False):
    key = items[1]
    v = items[0]
    unique_values[key].append(v)

unique_values_count = {}
for k, values in unique_values.iteritems():
    unique_values_count[k] = [len(set(values))]

# reformat for plotting
key_col = ("a", "b", "c")
id_col = [unique_values_count[k][0] for k in key_col]



df2 = DataFrame({"keys":key_col, "unique_id_count": id_col})
df2.groupby("unique_id_count").size().plot(kind="bar")

有没有更好的方法可以更直接地使用初始数据帧来执行此操作?

直接使用
value\u counts()

s = df.groupby("keys").ids.agg(lambda x:len(x.unique()))
pd.value_counts(s).plot(kind="bar")
一个简单的解决方案是-

df['your_column'].count_values().plot.bar(rot=0)
如果您希望在值太多时限制条数-

df['your_column'].count_values()[:no_of_values].plot.bar(rot=0)

这可以简化一点:
s
可以在不使用lambda的情况下使用pandas
nunique
函数进行计算,例如:
s=df.groupby(“key”).agg(Series.nunique)
给出错误
()缺少两个必需的位置参数:“x”和“height”
,对我有效的修复是
df['ids'].value\u counts().plot(kind='bar'))
,熊猫版0.22真棒。这也命名了酒吧,例如:X,Y。非常感谢:)。根据前面的回答,我看不出这一点。
df['your_column'].count_values()[:no_of_values].plot.bar(rot=0)