如何从 Python 中两个不同 DataFrame 的值计数中绘制图表

Posted

技术标签:

【中文标题】如何从 Python 中两个不同 DataFrame 的值计数中绘制图表【英文标题】:How to make a plot from value counts of two different DataFrames in Python 【发布时间】:2020-10-22 23:20:52 【问题描述】:

我有以下两个数据框。我想绘制一个线图或散点图,它应指示 x 和 y 轴上“UserId”和“OwnerUserId”的值计数。请注意,“UserId”和“OwnerUserId”表示同一个用户,这些只是不同数据帧中的不同表示法。

我实际上想知道总数之间是否存在关系。用户拥有的徽章数(由“UserId”的值计数与他发布的帖子总数表示(由“OwnerUserId”的值计数表示。

我已经写了一个代码,但不知道它是否正确。

数据框 1(徽章)

rowId   UserId  Name    Date                   Class    TagBased
    1   1      Teacher  2009-09-30T15:17:50.660  3   False
    2   3      Teacher  2009-09-30T15:17:50.690  3   False
    3   13     Teacher  2009-09-30T15:17:50.690  3   False
    4   14     Teacher  2009-09-30T15:17:50.690  3   False
    5   22     Teacher  2009-09-30T15:17:50.690  3   False

DataFrame 2(帖子)

OwnerUserId   Post Title                                     CreationDate
1             Is a quotient of a reductive group reductive?  2009-09-28T16:11:38.533
2             Learning about Lie groups                      2009-09-28T17:42:23.207
1             Maths                                          2009-09-28T19:41:13.933

代码

x = badges['UserId'].value_counts()
y = posts['OwnerUserId'].value_counts()
sns.scatterplot(x,y)

注意 第一个数据帧的所有用户可能不会出现在第二个数据帧中。有没有一种方法可以只为两个数据框共有的用户绘制?

【问题讨论】:

【参考方案1】:

如果您确定 帖子用户 包含在 徽章用户 中,您可以使用 过滤 徽章值帖子索引

y = posts['OwnerUserId'].value_counts()
x = badges['UserId'].value_counts()[y.index]
sns.scatterplot(x,y)

否则,使用 2 个数据帧的公共属性过滤 x 和 y

common = list(set(badges.UserId.unique()).union(set(posts.OwnerUserId.unique()))

【讨论】:

以上是关于如何从 Python 中两个不同 DataFrame 的值计数中绘制图表的主要内容,如果未能解决你的问题,请参考以下文章

(多线程-Python)我如何创建一个脚本来运行我通常从两个不同的终端运行的两个脚本?

pandas一些基本操作(DataFram和Series)_1

Python数据分析笔记#8.2.2 索引上的合并

Python - 从函数返回多个值到不同的数组

pandas一些基本操作(DataFram和Series)_2

在scala中将列从一个数据帧添加到另一个数据帧[重复]