比较 ID,逐日键入 Pandas
Comparing ID, Type day by day Pandas
我有以下 df:
index, date, ID, type
0, 2022-04-04, 1, A
1, 2022-04-04, 2, B
2, 2022-04-03, 1, A
3, 2022-04-03, 2, A
我想要以下 df(添加一个新列('change'),如果实际日期与之前日期的 ID 类型发生变化,则该列为 True/False):
index, date, ID, type, change
0, 2022-04-04, 1, A, False (False because type didnt change from one day to the other: A-->A)
1, 2022-04-04, 2, B, True (True because type change from one day to the other: A-->B)
2, 2022-04-03, 1, A, --- (no information of the day before)
3, 2022-04-03, 2, A, --- (no information of the day before)
我需要一个代码来生成每个日期 True/False 的新列“更改”。
编辑:
这是我的真实 df(每个日期 150.000 个 ID,3 种类型 - 已启用、不合格、合格(未启用)和每个日期的 ID 数量不同(某些 ID 为 activated/desactivated):
index, date, ID, type
2022-03-14,262199,Enabled
2022-03-14,267695,Enabled
2022-03-14,262708,Not eligible
2022-03-14,233,Enabled
2022-03-14,263652,Not eligible
2022-03-14,267908,Not eligible
2022-03-14,263992,Enabled
2022-03-14,267973,Not eligible
2022-03-14,1996,Enabled
2022-03-14,268216,Eligible (not enabled)
....
同样的代码想法也以一种简单的方式出现,但有 3 种类型的 ID,而不是每个日期的固定数量的 ID。
IIUC 使用:
df['change'] = df['type'].ne(df.groupby('ID')['type'].shift(-1).fillna(df['type']))
print (df)
date ID type change
0 2022-04-04 1 A False
1 2022-04-04 2 B True
2 2022-04-03 1 A False
3 2022-04-03 2 A False
我有以下 df:
index, date, ID, type
0, 2022-04-04, 1, A
1, 2022-04-04, 2, B
2, 2022-04-03, 1, A
3, 2022-04-03, 2, A
我想要以下 df(添加一个新列('change'),如果实际日期与之前日期的 ID 类型发生变化,则该列为 True/False):
index, date, ID, type, change
0, 2022-04-04, 1, A, False (False because type didnt change from one day to the other: A-->A)
1, 2022-04-04, 2, B, True (True because type change from one day to the other: A-->B)
2, 2022-04-03, 1, A, --- (no information of the day before)
3, 2022-04-03, 2, A, --- (no information of the day before)
我需要一个代码来生成每个日期 True/False 的新列“更改”。
编辑: 这是我的真实 df(每个日期 150.000 个 ID,3 种类型 - 已启用、不合格、合格(未启用)和每个日期的 ID 数量不同(某些 ID 为 activated/desactivated):
index, date, ID, type
2022-03-14,262199,Enabled
2022-03-14,267695,Enabled
2022-03-14,262708,Not eligible
2022-03-14,233,Enabled
2022-03-14,263652,Not eligible
2022-03-14,267908,Not eligible
2022-03-14,263992,Enabled
2022-03-14,267973,Not eligible
2022-03-14,1996,Enabled
2022-03-14,268216,Eligible (not enabled)
....
同样的代码想法也以一种简单的方式出现,但有 3 种类型的 ID,而不是每个日期的固定数量的 ID。
IIUC 使用:
df['change'] = df['type'].ne(df.groupby('ID')['type'].shift(-1).fillna(df['type']))
print (df)
date ID type change
0 2022-04-04 1 A False
1 2022-04-04 2 B True
2 2022-04-03 1 A False
3 2022-04-03 2 A False