我有以下数据帧:
account_id contract_id date_activated
0 1 AAA 2021-01-05
1 1 ADS 2020-12-12
2 1 ADGD 2021-02-03
3 2 HHA 2021-03-05
4 2 HAKD 2021-03-06
5 3 HADSA 2021-05-01
我希望得到以下结果:
account_id contract_id date_activated Renewal Order
0 1 ADS 2020-12-12 Original
1 1 AAA 2021-01-05 1st
2 1 ADGD 2021-02-03 2nd
3 2 HHA 2021-03-05 Original
4 2 HAKD 2021-03-06 1st
5 3 HADSA 2021-05-01 Original
我要创建的列是“续订订单”。每个帐户可以有多个合同。该条件基于每个帐户(帐户id)和激活合同的顺序(激活日期)。第一份合同将被标识为“原件”,而后续合同将被标识为“第一份”、“第二份”,依此类推
以下是原始数据帧的字典:
{'account_id': {0: 1, 1: 1, 2: 1, 3: 2, 4: 2, 5: 3},
'contract_id': {0: 'AAA',
1: 'ADS',
2: 'ADGD',
3: 'HHA',
4: 'HAKD',
5: 'HADSA'},
'date_activated': {0: Timestamp('2021-01-05 00:00:00'),
1: Timestamp('2020-12-12 00:00:00'),
2: Timestamp('2021-02-03 00:00:00'),
3: Timestamp('2021-03-05 00:00:00'),
4: Timestamp('2021-03-06 00:00:00'),
5: Timestamp('2021-05-01 00:00:00')}}
以下是结果字典:
{'account_id': {0: 1, 1: 1, 2: 1, 3: 2, 4: 2, 5: 3},
'contract_id': {0: 'ADS',
1: 'AAA',
2: 'ADGD',
3: 'HHA',
4: 'HAKD',
5: 'HADSA'},
'date_activated': {0: Timestamp('2020-12-12 00:00:00'),
1: Timestamp('2021-01-05 00:00:00'),
2: Timestamp('2021-02-03 00:00:00'),
3: Timestamp('2021-03-05 00:00:00'),
4: Timestamp('2021-03-06 00:00:00'),
5: Timestamp('2021-05-01 00:00:00')},
'Renewal Order': {0: 'Original',
1: '1st',
2: '2nd',
3: 'Original',
4: '1st',
5: 'Original'}}
还有一个选择:
尝试^{} 确保合同的顺序正确+^{} 以获取每个订单号,然后^{} 或^{} 使用函数将数字转换为所需的字符串值:
或
我们可以首先通过分组
account_id
找到cumcount,然后使用np.select我们可以提供条件ifRenewal Order is 0 then replace it with Original
和以下条件。我们可以将其扩展到
3rd, 4th and so on
。如果我们需要任何默认值,我还设置了一个条件
default=unorignal
代码
输出
相关问题 更多 >
编程相关推荐