Python 计算熊猫中第一个事件的第n天

Python 计算熊猫中第一个事件的第n天,python,datetime,pandas,Python,Datetime,Pandas,我有以下数据框,是我原始数据框的子集,包含列event、unixtime和day,我想添加另一列arbday,这是自第一个事件以来的第n天(第一次访问是第1天): 环顾四周后,我试图通过以下方式实现这一点: >>> testdf2['arbday'] = np.where(testdf2['event']==1, 1, testdf2.day.apply(lambda x: x-x[:1])) event unixtime day

我有以下数据框,是我原始数据框的子集,包含列event、unixtime和day,我想添加另一列arbday,这是自第一个事件以来的第n天(第一次访问是第1天):

环顾四周后,我试图通过以下方式实现这一点:

>>> testdf2['arbday'] = np.where(testdf2['event']==1, 1, testdf2.day.apply(lambda x: x-x[:1]))  
        event       unixtime         day   arbday
343352      1  1346617885925  2012-09-02        1
343353      2  1346961625305  2012-09-06      NaN
343354      3  1347214217566  2012-09-09      NaN

or  

>>> testdf2['arbday'] = np.where(testdf2['event']==1, 1, testdf2.day.apply(lambda x: dt.timedelta(x-x[:1])))
TypeError: 'datetime.date' object is not subscriptable 
正确的方法是什么?非常感谢您的指点

编辑:关于将此应用于组的后续问题如下

输出:

   event       unixtime         day  arbday
0      1  1346617885925  2012-09-02       1
1      2  1346961625305  2012-09-06       5
2      3  1347214217566  2012-09-09       8

嗨,谢谢你的回答。但是,它在我的数据帧上不起作用,可能是因为它不是列day不是datetime对象(尽管我认为应该是)。请查看上面的编辑。您好@root,再次感谢您的更新。我让它在上面的虚拟数据帧上工作,它的索引为0,1,2。但在我的实际数据帧上,它不起作用,这是因为
df.get\u value(index,col)
将索引作为第一个参数。它在虚拟数据帧上工作的原因是
'event'==1
在逻辑上为False,Python将False关联为0,因此在本例中返回索引[0]。如果将其更改为逻辑上为True的
'event'=='event'
,它将返回第二天的datetime.date(2012,9,6)。我现在正试图找到一种方法返回访问1的索引。谢谢@root,这非常有帮助!作为后续问题,您将如何在组上应用相同的功能?(见最新问题)。再次感谢@S.zhen——你不应该通过更新来问“后续”问题。如果你有一个新问题,问一个新问题。问题/答案必须保持透明,这样才能使其他用户受益,他们可能有类似的问题,而不是成为个人教程。@root,对此表示抱歉。我把它换成原来的问题。我会在别的地方问我的新问题。谢谢
df = DataFrame({'event': range(1,4), 'unixtime': [1346617885925, 1346961625305,1347214217566]})
df['day'] = df['unixtime'].apply(lambda x: datetime.fromtimestamp(x/1000).date())
df['arbday']=df['day'].map(lambda x: (x-df.get_value(df[df.event == 1].first_valid_index(), 'day')).days+1)
print df
   event       unixtime         day  arbday
0      1  1346617885925  2012-09-02       1
1      2  1346961625305  2012-09-06       5
2      3  1347214217566  2012-09-09       8