微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何映射和计算 2 个数据帧中出现的项目

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

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

一个数据帧(项目)=

项目 产品名称
100 奶酪
201 牛奶
302 鸡蛋

第二个数据帧(转换)

交易
201 100 302
100 302
201 302

我设法拆分交易列并通过此代码将其分开

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

0 1 2
201 100 302
100 302
201 302

现在我正在努力研究如何映射两个数据框和一个函数或 Get_dummies,并计算从 DataFrame (items) 购买/发生在 DataFrame(Transaction) 中的项目数。

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

提示。数据帧经过简化,实际数据帧长度为 10,000。

非常感谢您的帮助

解决方法

准备好从多列项目更改为单列 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()

项目 0
0 302 3
1 100 2
2 201 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
,

如果您需要一种热编码,您可能需要先融化 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。