猿问

如何使用带有计算多列的函数的pandas rolling.apply?

我有一个带有日期和 ID(已排序)的数据框。


> date              id        newid (expected result)

> 2019-01-01 10:00   1   20190101000001-A

> 2019-01-01 11:00   1   20190101000002-A

> 2019-01-01 12:00   1   20190101000003-A

> 2019-01-01 19:00   2   20190101000001-A

> 2019-01-02 09:00   2   20190102000001-A

> 2019-01-02 10:00   2   20190102000002-A

> 2019-01-05 15:00   3   20190103000001-A


def create_new_id(params):

    if (previous_date != recent_date) or (previous_id != recent_id):

        new_id = 'date000001-A'


    if (previous_date == recent_date) and (previous_id == recent_id):

        new_id = previous_new_id + 1# (change date000001-A to date000002-A)


    return new_id

作为示例数据,我想通过创建一个条件来检查以前的值来生成一个新的 id。


我试着用这个


df['newid ] = df.rolling(window=2).apply(create_new_id)

但我不知道正确的使用方法。


元芳怎么了
浏览 509回答 1
1回答

隔江千里

尝试df['newid'] = df['date'].dt.strftime('%Y%m%d')+(df.groupby([df['date'].dt.date,'id']).cumcount()+1).astype(str).str.zfill(6) + '-A'print(df)# print                 date  id             newid0 2019-01-01 10:00:00   1  20190101000001-A1 2019-01-01 11:00:00   1  20190101000002-A2 2019-01-01 12:00:00   1  20190101000003-A3 2019-01-01 19:00:00   2  20190101000001-A4 2019-01-02 09:00:00   2  20190102000001-A5 2019-01-02 10:00:00   2  20190102000002-A6 2019-01-05 15:00:00   3  20190105000001-A
随时随地看视频慕课网APP

相关分类

Python
我要回答