我目前有一个看起来像这样的数据集。
DateTime, CustomerID, 2, 3, Product Subclass, ProductID, 6, 7, 8
2001-01-08 00:00:00;01217544 ;E ;E ;530112;4710094020568;1;51;66
2001-01-08 00:00:00;00102292 ;D ;F ;560102;4710032502811;1;115;128
2001-01-08 00:00:00;01443141 ;C ;E ;500538;2250078000251;1;69;78
2001-01-08 00:00:00;01439274 ;J ;E ;100401;4710043001211;1;409;450
2001-01-08 00:00:00;01724790 ;D ;F ;100202;4710047512065;1;15;18
2001-01-08 00:00:00;02013275 ;J ;E ;110217;4710892632017;2;370;398
我已将此数据拆分为较小的矩阵,每个日期和客户一个矩阵。我想从每个矩阵中提取productID,并为每个客户的每一天创建一个事务数据集,每个事务都有一行productID。
但是,我目前停留在从较小的矩阵中获取productID。我可以使用groupby函数拆分数据。但是,这会产生带有文本的1x1块,而我似乎无法从中检索ProductID。如何从我创建的组中获取ProductID,以便我可以将它们放在一个列中,放在一个新数组中?
import numpy as np
import pandas as pd
'''DateTime, CustomerID, Product Subclass, ProductID'''
D01 = pd.read_csv('Data/D01.txt', sep=';', header=0, names=['DateTime','CustomerID','ProductSubclass', 'ProductID'], usecols=(0,1,4,5))
groupedData = np.asmatrix(D01.groupby(['DateTime','CustomerID']))
print np.asmatrix(groupedData)
我一次交易的当前输出
[('2001-01-31 00:00:00', 2174006)
DateTime CustomerID ProductSubclass ProductID
214244 2001-01-31 00:00:00 2174006 100208 4710144202227
214468 2001-01-31 00:00:00 2174006 500111 4718433614799
214819 2001-01-31 00:00:00 2174006 100110 4901550332077
215420 2001-01-31 00:00:00 2174006 500303 4710367807421]]
期望的输出
...
(4710144202227, 4718433614799, 4901550332077, 4710367807421)
...
答案 0 :(得分:0)
这是你正在寻找的吗?
# make data
df = pd.DataFrame({
'datetime' : [pd.to_datetime('2001-01-08')] * 6,
'customerID' : ['01217544', '00102292', '01443141', '01439274', '01724790', '02013275'],
2 : ['E', 'D', 'C', 'J', 'D', 'D'],
3 : ['E', 'F', 'E', 'E', 'F', 'E'],
'product_subclass' : [530112, 560102, 500538, 100401, 100202, 110217],
'productID' : [4710094020568, 4710032502811, 2250078000251, 4710043001211, 4710047512065, 4710892632017],
6 : [1, 1, 1, 1, 1, 2],
7 : [51, 115, 69, 409, 15, 370],
8 : [66, 128, 78, 450, 18, 398]
})
# set index as 'datetime' and 'customerID'
df = df.set_index([
'datetime',
'customerID'
]).sort_index()
# cross section on 2001-01-08 and customerID = 00102292
df.xs(['20010108', '00102292'])['productID']