在pandas中绘制每个唯一值计数的关键计数

23 投票
3 回答
70363 浏览
提问于 2025-04-17 17:24

我有一组数据,想要绘制每个唯一ID对应的键的数量(x轴是唯一ID的数量,y轴是键的数量)。我正在学习如何使用 pandas 来实现这个目标。

在这个例子中:

唯一ID 1 对应的键数量是 2

唯一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")

有没有更直接的方法可以使用最初的数据框来做到这一点呢?

3 个回答

4

一个简单的解决办法是 -

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

如果你想限制条形图的数量,当数值太多的时候 -

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

直接使用 value_counts() 这个方法怎么样?

pd.value_counts(df['ids']).plot.bar()

这里插入图片描述

29

在编程中,有时候我们需要处理一些数据,比如从一个地方获取数据,然后把它放到另一个地方。这个过程就像是搬家,把东西从一个房间搬到另一个房间一样。

有些时候,我们会遇到一些问题,比如数据的格式不对,或者我们想要的数据没有找到。这就像是你在搬家的时候,发现有些东西放错了地方,或者有些东西根本就不见了。

为了避免这些问题,我们可以使用一些工具和方法来帮助我们更顺利地完成这个搬家的过程。比如,我们可以提前规划好每个东西应该放在哪里,或者使用标签来标记每个箱子,这样在搬家的时候就不会搞混了。

总之,处理数据就像搬家一样,需要细心和计划,才能确保一切顺利进行。

s = df.groupby("keys").ids.agg(lambda x:len(x.unique()))
pd.value_counts(s).plot(kind="bar")

撰写回答