将(地图)功能应用于某些 Pandas 数据框元素

Apply (map) function to CERTAIN Pandas dataframe elements

我正在尝试仅对以下数据框中的日期时间单元格应用时间折扣函数。第一列有一个用户 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 多个堆栈溢出问题中,none 解决了如何将函数仅应用于数据帧的某些元素。

优步轻松码分享

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

这是 pandas 函数 notnull 非空性 检查应用于我的 table 之一。 table bookdates_charge1_df 由两列组成:BookDateCharge1.

我将 table 分配给它自己,但只有在我检查了“Charge1”的元素不为空之后。

记得'Charge1'是一个系列(一维数组,例如单列)。因此必须应用this function

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

如果你尝试做

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

解释器会抱怨字符串没有属性'notnull'。因为它没有。 (我不知道你试过什么,但我只是添加这个以防你试过这个。下次,请添加你试过的!)

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

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