在pandas中使用args应用函数

Woo*_*per 6 python dataframe pandas

我试图找出是否Date陷入PromoInterval数据框架.

print dset1

        Store   Date    PromoInterval
1760    2   2013-05-04  Jan,Apr,Jul,Oct
1761    2   2013-05-03  Jan,Apr,Jul,Oct
1762    2   2013-05-02  Jan,Apr,Jul,Oct
1763    2   2013-05-01  Jan,Apr,Jul,Oct
1764    2   2013-04-30  Jan,Apr,Jul,Oct

def func(a,b):
    y = b.split(",")
    z = {1:'Jan',2:'Feb',3:'Mar', 4:'Apr',5:'May',6:'Jun',7:'Jul',8:'Aug',9:'Sep',
        10:'Oct',11:'Nov',12:'Dec'}
    return (z[a] in y)

dset1.apply(func, axis=1, args = (dset1['Date'].dt.month, dset1['PromoInterval']) )
Run Code Online (Sandbox Code Playgroud)

碰到下面的错误:

dset1.apply(func,axis = 1,args =(dset1 ['Date'].dt.month,> dset1 ['PromoInterval']))('func()正好接受2个参数(3个给定)',u'发生在指数1760')

数据集:

{'Date': {1760: Timestamp('2013-05-04 00:00:00'),
  1761: Timestamp('2013-05-03 00:00:00'),
  1762: Timestamp('2013-05-02 00:00:00'),
  1763: Timestamp('2013-05-01 00:00:00'),
  1764: Timestamp('2013-04-30 00:00:00')},
 'PromoInterval': {1760: 'Jan,Apr,Jul,Oct',
  1761: 'Jan,Apr,Jul,Oct',
  1762: 'Jan,Apr,Jul,Oct',
  1763: 'Jan,Apr,Jul,Oct',
  1764: 'Jan,Apr,Jul,Oct'},
 'Store': {1760: 2, 1761: 2, 1762: 2, 1763: 2, 1764: 2}}
Run Code Online (Sandbox Code Playgroud)

fir*_*ynx 4

我首先使用列上的 lambda 函数格式化月份的文本字符串'Date'

df['Month'] = df['Date'].apply(lambda x: x.strftime('%b'))
Run Code Online (Sandbox Code Playgroud)

然后我会触发一个 lambda 函数,axis=1这意味着它在数据帧上的 x 轴上运行。这里我只是检查是否'Month''PromoInterval'

df[['PromoInterval', 'Month']].apply(lambda x: x[1] in x[0], axis=1)

1760    False
1761    False
1762    False
1763    False
1764     True
dtype: bool
Run Code Online (Sandbox Code Playgroud)