Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 市场篮子分析_Python_Python 3.x_Pandas_Market Basket Analysis - Fatal编程技术网

Python 市场篮子分析

Python 市场篮子分析,python,python-3.x,pandas,market-basket-analysis,Python,Python 3.x,Pandas,Market Basket Analysis,我有以下关于零售店的交易数据集: 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

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

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
    ...

简而言之,如果一笔交易具有相同的助理名称和日期,我假设它确实生成了一张新发票。

使用
pandas
类别是一种方法:

df['Invoice'] = list(zip(df['Date'], df['Assistant_name']))
df['Invoice'] = df['Invoice'].astype('category').cat.codes + 1

#               product      Date Assistant_name  Invoice
# 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
此方法的好处是,您可以轻松检索映射字典:

dict(enumerate(df['Invoice'].astype('category').cat.categories, 1))
# {1: ('11:45:00', 'John'), 2: ('11:55:00', 'Mark')}
最简单的是将柱连接在一起:

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\u-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)

在哪里可以找到pd.lib.fast\u zip的文档?