如果满足某些条件,则需要增加序号,否则需要保留以前的序号。
原始数据集:
| 识别号|姓名|现况|集群|差距|
| - ------|- ------|- ------|- ------|- ------|
| 1个|A类|无|1个|十五|
| 1个|B|1个|1个|三十五|
| 1个|C级|1个|1个|03|
| 第二章|B|无|1个|二十六|
| 第二章|C级|无|1个|十六|
| 三个|A类|1个|1个|六十五|
| 三个|C级|无|1个|八十九|
| 三个|F级|无|1个|十九|
所需数据集:
| 识别号|姓名|现况|集群|差距|
| - ------|- ------|- ------|- ------|- ------|
| 1个|A类|无|1个|十五|
| 1个|B|1个|第二章|三十五|
| 1个|C级|1个|三个|03|
| 第二章|B|无|1个|二十六|
| 第二章|C级|无|1个|十六|
| 三个|A类|1个|1个|六十五|
| 三个|C级|无|第二章|八十九|
| 三个|F级|无|第二章|十九|
条件:
1.对于第一次出现的ID,群集应为1。
1.如果status = 1或Gap〉28,则群集需要根据患者ID增加1(参见第1-C和2-B行---随着ID的变化,群集保持为1,因为它是特定ID的第一次出现)。
1.如果不满足条件,则需要保存前一个聚类号(可以引用最后一行)。
我尝试的代码是:
Original_dataset.loc[((new_df4['gap'] > 28) | (Original_dataset['status'] == 1)),'Cluster'] = Original_dataset['Cluster'] + 1
2条答案
按热度按时间wlzqhblo1#
如果较大的GAP类似于
28
,或者如果Status
是1
或ID
在DataFrame.loc
中的第一个重复值,则首先设置1
,然后对GroupBy.cumsum
和GroupBy.ffill
使用lambda函数s4chpxco2#
您可以使用基于3个条件的掩码,以及简单的
groupby.cumsum
:输出: