我尝试仅在以下数据框中的日期时间单元格上应用时间折扣功能。第一列有一个用户ID,分散在数据帧的其余部分是pandas日期时间条目。
我想使用的时间折扣功能依赖于数据框内元素之间的时间差异以及其他时间。如果t
为时间t=g.ix[11:,6]
,那么h
是一个time_deltas h=t-g[g.ix[:,1:]!=0]
的数据框,如下所示。
是否可以应用函数
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用于加载(我保证它没有任何病毒)。
答案 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
由两列组成:BookDate
和Charge1
。
我将表格分配给自己,但仅在我检查了&#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;。因为它没有。 (我不知道你尝试了什么,但我只是在你尝试这个的时候添加它。下次,请添加你尝试的内容!)