如何在 2 个数据框中映射和计算项目的出现次数

Posted

技术标签:

【中文标题】如何在 2 个数据框中映射和计算项目的出现次数【英文标题】:how to map and counts items occurrence in 2 Dataframes 【发布时间】:2021-05-10 08:38:59 【问题描述】:

我是数据科学的新手,我还在学习,如果我对我的问题的解释不正确,请见谅。

我有 2 个数据框,第一个数据框(项目)显示一些杂货产品名称,它是项目编号,而第二个数据框(交易)显示包含已购买项目的交易编号。

第一个数据帧(项目)=

Item ProductName
100 Cheese
201 Milk
302 egg

第二个数据帧(交易)

Transaction
201 100 302
100 302
201 302

我设法拆分交易列并用这段代码分隔它

Transaction=transactions.str.split(' ', expand=True)], axis=1) DataFrame 变得像

0 1 2
201 100 302
100 302 None
201 302 None

现在我正在努力研究如何同时映射数据帧和一个热函数或 Get_dummies,并计算在 DataFrame(Transaction) 中购买/发生了多少来自 DataFrame (items) 的项目。

我想这样做的原因是因为我试图这样做是为了应用 Apriori 函数来查找购物篮分析的关联规则。

提示。有数据帧被简化,实际数据帧是10,000长度。

非常感谢您的帮助

【问题讨论】:

【参考方案1】:

准备好从多列项目更改为单列reshape(),然后使用value_counts() 获取交易中的项目计数就很简单了。显然,这也可以加入/合并到产品数据框。

dfp = pd.DataFrame('Item': 0: 100, 1: 201, 2: 302,
 'ProductName': 0: 'Cheese', 1: 'Milk', 2: 'egg')
dftrans = pd.DataFrame('Transaction': 0: '201 100 302', 1: '100 302', 2: '201 302')


dftrans = dftrans.Transaction.str.split(" ", expand=True)
pd.DataFrame(dftrans.values.reshape(len(dftrans)*len(dftrans.columns),1), columns=["Item"]).value_counts().to_frame().reset_index()

Item 0
0 302 3
1 100 2
2 201 2

【讨论】:

【参考方案2】:
>>> pd.merge(df1, df2.squeeze().str.split() \
                     .explode().astype(int) \
                     .rename("Item"),
             on="Item").value_counts().rename("Count").reset_index()

   Item ProductName  Count
0   302         egg      3
1   201        Milk      2
2   100      Cheese      2

【讨论】:

【参考方案3】:

如果您需要一个热编码,您可能需要先融化 trans 数据帧:

dftransnew = pd.melt(dftrans.reset_index(),value_name='Item',id_vars='index').drop(columns='variable')
dftransnew = dftransnew[pd.notnull(dftransnew.Item)] # removing nulls

和 get_dummies 并按交易分组以获取编码的篮子:

dfbasket=pd.get_dummies(dftransnew, prefix="", prefix_sep="" ).groupby('index').sum()
dfbasket

输出:

    100     201     302
index           
0   1       1       1
1   1       0       1
2   0       1       1

【讨论】:

以上是关于如何在 2 个数据框中映射和计算项目的出现次数的主要内容,如果未能解决你的问题,请参考以下文章

如何计算R中数据框中字符串中“c(\”)的出现次数?

如何查找在熊猫数据框中出现最多的行项目

计算 pyspark 数据框中的出现次数

计算火花数据框中所有列(300 列)的每个不同值的出现次数

如何计算一个项目在mysql中给定日期出现的次数

错误:计算数据框中的出现次数时无需重复