Pandas Group的替代方案By有条件地操纵列

时间:2017-12-06 17:23:03

标签: python-3.x pandas pandas-groupby

我正在尝试使用Pandas Series.shift()来操纵pandas列,认为它比Pandas.Groupby快得多。我正在寻找pandas groupby的替代方案的原因是因为我的数据有~700K rows并且循环遍历每个组以执行列操作需要花费大量时间。数据片段如下所示。我的功能如下:

def func1(x):
    blck_list = [
               'b_9:00AM to 10:00AM',
               'c_10:00AM to 11:00AM',
               'd_11:00AM to 12:00PM'
         ]

    if x["Row_ID"].shift(-1) == x["Row_ID"]:
        for i in blck_list:
            if x[i] != 0:
                x[i] = x[i] - 1              
    return x

temp = func1(df)

数据如下:

df= 
Row_ID      b_9:00AM to 10:00AM  c_10:00AM to 11:00AM  d_11:00AM to 12:00PM  
1-1000156                 0                     0                     0  
1-1000156                 0                     0                     0  
1-1000156                 0                     0                     0  
1-1000CY4                 4                     0                     3  
1-1000CY4                 5                     0                     0  
1-1000CY4                 0                     1                     3  
1-1000CY4                 0                     2                     4  
1-1000GH4                 2                     1                     7 
1-1000GH4                 0                     2                     0  
1-1000K1A                 0                     0                     0  
1-1000OZ1                 1                     0                     0  
1-1000OZ1                 1                     0                     0  
1-10012IB                 0                     0                     0  
1-10012IB                 0                     0                     0  
1-10012IB                 0                     0                     0  

我想要做的就是从列中减去1,其中Row_ID的行0不是Pandas.apply()。我的函数产生以下错误:

  

ValueError:系列的真值是不明确的。使用a.empty,   a.bool(),a.item(),a.any()或a.all()。

如果我使用temp = df_pivot.apply(func1, axis=1)方法来调用ie。Series.shift()我会收到以下错误:

  

属性错误:("' str'对象没有属性' shift'",'发生于   索引567517')

这里使用http://localhost:500/XXX/getXXX?currentPage=-1&numPerPage=4 方法的正确方法是什么。有没有其他替代方法来解决这个问题。

0 个答案:

没有答案