python - 购物篮分析

标签 python python-3.x pandas market-basket-analysis

我有以下关于零售店的 pandas 交易数据集:

print(df)

product       Date                   Assistant_name
product_1     2017-01-02 11:45:00    John
product_2     2017-01-02 11:45:00    John
product_3     2017-01-02 11:55:00    Mark
...

我想创建以下数据集,用于市场购物篮分析:

product       Date                   Assistant_name  Invoice_number
product_1     2017-01-02 11:45:00    John            1
product_2     2017-01-02 11:45:00    John            1
product_3     2017-01-02 11:55:00    Mark            2
    ...

简而言之,如果交易具有相同的 Assistant_name 和 Date,我认为它会生成新的发票。

最佳答案

最简单的是factorize将列连接在一起:

df['Invoice'] = pd.factorize(df['Date'].astype(str) + df['Assistant_name'])[0] + 1
print (df)
     product                 Date Assistant_name  Invoice
0  product_1  2017-01-02 11:45:00           John        1
1  product_2  2017-01-02 11:45:00           John        1
2  product_3  2017-01-02 11:55:00           Mark        2

如果性能很重要,请使用 pd.lib.fast_zip:

df['Invoice']=pd.factorize(pd.lib.fast_zip([df.Date.values, df.Assistant_name.values]))[0]+1

时间:

#[30000 rows x 3 columns]
df = pd.concat([df] * 10000, ignore_index=True)

In [178]: %%timeit
     ...: df['Invoice'] = list(zip(df['Date'], df['Assistant_name']))
     ...: df['Invoice'] = df['Invoice'].astype('category').cat.codes + 1
     ...: 
9.16 ms ± 54.8 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [179]: %%timeit
     ...: df['Invoice'] = pd.factorize(df['Date'].astype(str) + df['Assistant_name'])[0] + 1
     ...: 
11.2 ms ± 395 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [180]: %%timeit 
     ...: df['Invoice'] = pd.factorize(pd.lib.fast_zip([df.Date.values, df.Assistant_name.values]))[0] + 1
     ...: 
6.27 ms ± 93.6 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

关于python - 购物篮分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48851820/

相关文章:

python - 查找给定图(Python)的所有完整子图的有效方法?

python - swig C++->Python 2.X 转换和方法的参数

python - 如何隐藏带星号的单词中的字母?

python - 如何检查模块是否已导入

python - 如何在忽略 NaN 值的同时将我的 DataFrame 转换为字典?

python - 灰度框架上的 numpy.where(),索引错误?

python - 有没有办法从 .py 文件命令行创建 .ipynb?

python - 如何获取 Pandas 时间序列中一个月的所有行,无论年份如何?

python - 比较 df 列中的值,将匹配项提取到 1 列,将差异提取到另一列

python - Pandas如何过滤同一列中的空值和零值