【问题标题】:Frequency of Correlation Between Two Categorical Pandas Columns两个分类 Pandas 列之间的相关频率
【发布时间】:2020-07-27 18:24:38
【问题描述】:

我有两个 Pandas 数据框,每个唯一的 member_id 可能有许多行,分别列出他们拥有的汽车和宠物。这两个 DF 各有数千行,它们的结构看起来像这样(这是一个超级抽象的例子,因为我不能随意分享我实际比较的分类变量。重点是有两个分类变量每个成员可以有多个,并且已知至少一些对汽车/宠物之间可能存在相关性):

我的目标是查看每对宠物和汽车之间的成对相关性。例如,从上面固定的图像中,在拥有猫的三个成员(2、3 和 4)中,其中一个拥有丰田。因此,Cat-Toyota 的成对频率将为 33%。使用一小组数据很容易做到这一点,但是我在弄清楚如何在数千行上自动执行此操作时遇到了很多麻烦。特别是,由于每个成员在两个数据框中都可以有很多行,所以我不知道如何按成员分组,然后迭代该成员的每个宠物车组合。

【问题讨论】:

  • 请不要将图像升级为代码。粘贴为文本会增加您获得答案的机会。欢迎阅读how to ask
  • @Terry 如何将 DF 作为文本上传?我还没有弄清楚,那个链接似乎没有答案
  • 您可以将df.head()的结果复制为示例并粘贴为编辑菜单上的“代码示例”

标签: python pandas statistics categorical-data pairwise


【解决方案1】:

首先创建了一些随机数据(下次发布易于复制数据示例的好点):

from random import choices
import pandas as pd

member_ids = [1,2,3,4]
pets = ['cat', 'dog', 'snake', 'lion', 'platypus', 'bat', 'pangolin']
cars = ['toyota', 'ford', 'fiat', 'maserati', 'ferrari']

df = pd.DataFrame([choices(member_ids, k=200), choices(pets, k=200), choices(cars, k=200)], index=['id', 'pet', 'car']).T.drop_duplicates()

然后,如果我正确理解您想要什么,请使用 groupby 并将值计数归一化:

df.groupby('pet')['car'].value_counts(normalize=True).round(3)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-03
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    • 2023-03-15
    相关资源
    最近更新 更多