代码之家  ›  专栏  ›  技术社区  ›  Rodi

从groupby矩阵获取值

  •  0
  • Rodi  · 技术社区  · 8 年前

    我当前有一个类似于此的数据集。

    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)
     ...
    
    1 回复  |  直到 8 年前
        1
  •  0
  •   Ian Thompson    8 年前

    这就是你要找的吗?

    # 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']
    

    output