如何解决如何映射和计算 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 举报,一经查实,本站将立刻删除。