Python 如何使用函数来计算多列?

Python 如何使用函数来计算多列?,python,pandas,Python,Pandas,我有一个带有日期和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

我有一个带有日期和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)
但是我不知道正确的使用方法。

试试看

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             newid
0 2019-01-01 10:00:00   1  20190101000001-A
1 2019-01-01 11:00:00   1  20190101000002-A
2 2019-01-01 12:00:00   1  20190101000003-A
3 2019-01-01 19:00:00   2  20190101000001-A
4 2019-01-02 09:00:00   2  20190102000001-A
5 2019-01-02 10:00:00   2  20190102000002-A
6 2019-01-05 15:00:00   3  20190105000001-A

为什么你的第四张20190101000001-A?根据你的代码,不是应该是20190101000004-A吗?是否还有其他id不同的情况?我不认为rolling是你的朋友,在这种情况下,轮班是…@giser_yugang我忘记了另一个id不同的情况,对不起。@Frenchy我将尝试轮班方式: