将(map)函数应用于CERTAIN Pandas数据框元素

时间:2016-01-20 06:36:22

标签: python python-2.7 pandas dataframe map-function

我尝试仅在以下数据框中的日期时间单元格上应用时间折扣功能。第一列有一个用户ID,分散在数据帧的其余部分是pandas日期时间条目。

enter image description here

我想使用的时间折扣功能依赖于数据框内元素之间的时间差异以及其他时间。如果t为时间t=g.ix[11:,6],那么h是一个time_deltas h=t-g[g.ix[:,1:]!=0]的数据框,如下所示。

enter image description here

是否可以应用函数

def calc_time_discount(t_delta):
        t_delta=t_delta.days
        if t_delta <= 14:
                d=18.375/(t_delta-24.5)+1.75
        else:
                d=0
        return d

h,以便所有日期时间条目(不会将np.nans更改为日期本身)将产生一个折扣因子(恰好是1到0之间的值),我可以存储一个与h相同大小的新数据帧(或者g就此而言)?

在我讨论过的20多个堆栈溢出问题中,没有解决人们如何将函数仅应用于数据帧的某些元素。

优步轻松共享代码

这里有一个zip with function and g.pkl用于加载(我保证它没有任何病毒)。

2 个答案:

答案 0 :(得分:1)

您应该尝试仅将函数应用于非null元素,如下所示:

h.apply(lambda x: my_func(x) if(np.all(pd.notnull(x[1]))) else x, axis = 1)

答案 1 :(得分:0)

这里的pandas函数notnull正在检查 not-null-ness 到我的一个表中。表格bookdates_charge1_df由两列组成:BookDateCharge1

我将表格分配给自己,但仅在我检查了&#39; Charge1`的元素后才为空。

召回&#39; Charge1&#39;是一系列(一维数组,例如单列)。因此,必须应用this function

bookdates_charge1_df = bookdates_charge1_df[
    bookdates_charge1_df.Charge1.notnull()
]

如果您尝试

bookdates_charge1_df = bookdates_charge1_df[
    'Charge1'.notnull()
]

解释器会抱怨字符串没有属性&#39; notnull&#39;。因为它没有。 (我不知道你尝试了什么,但我只是在你尝试这个的时候添加它。下次,请添加你尝试的内容!)