Python 如何按列分组,并将重复值设为1,将原始值设为0
我有一个数据框:-Python 如何按列分组,并将重复值设为1,将原始值设为0,python,dataframe,date,group-by,rank,Python,Dataframe,Date,Group By,Rank,我有一个数据框:- Date bikes 0 28/12/2021 zw12 1 28/12/2021 zw11 2 28/12/2021 zw13 3 28/12/2021 zw14 4 26/12/2021 zw11 5 25/12/2021 zw11 6 23/12/2021 zw12 7 20/12/2021 zw12 8 19/12/2021 zw11 9 22/05/2020 zw11 10 24/05/
Date bikes
0 28/12/2021 zw12
1 28/12/2021 zw11
2 28/12/2021 zw13
3 28/12/2021 zw14
4 26/12/2021 zw11
5 25/12/2021 zw11
6 23/12/2021 zw12
7 20/12/2021 zw12
8 19/12/2021 zw11
9 22/05/2020 zw11
10 24/05/2020 zw12
现在,我想按“bikes”列分组,并从“date”列中选择最新的日期。为此,我创建了一个列“Rank”,它将最新记录指定为1,将旧记录/重复记录指定为2。我试着这样做,如下所示:-
df_rank=df.assign(rank=df.groupby('bikes')['Date'].transform(lambda x: x.rank())) \
.sort_values('Date',ascending = False)
print(df_rank)
Date bikes rank
0 28/12/2021 zw12 4.0
1 28/12/2021 zw11 5.0
2 28/12/2021 zw13 1.0
3 28/12/2021 zw14 1.0
4 26/12/2021 zw11 4.0
5 25/12/2021 zw11 3.0
10 24/05/2020 zw12 3.0
6 23/12/2021 zw12 2.0
9 22/05/2020 zw11 2.0
7 20/12/2021 zw12 1.0
8 19/12/2021 zw11 1.0
正如您所看到的,秩函数并没有按我所希望的那样赋值。我用错了吗?
我希望列“Rank”中的最新/原始记录为0,重复/旧记录为1
期望输出:-
Date bikes rank
0 28/12/2021 zw12 1.0
1 28/12/2021 zw11 1.0
2 28/12/2021 zw13 1.0
3 28/12/2021 zw14 1.0
4 26/12/2021 zw11 2.0
5 25/12/2021 zw11 2.0
10 24/05/2020 zw12 2.0
6 23/12/2021 zw12 2.0
9 22/05/2020 zw11 2.0
7 20/12/2021 zw12 2.0
8 19/12/2021 zw11 2.0
假设
Date
列的类型为datetime,则:
from itertools import count
from collections import defaultdict
d = defaultdict(count)
df = df.sort_values(by="Date", ascending=False)
df["rank"] = (
df.groupby("Date", sort=False)["bikes"]
.transform(lambda x: [next(d[v]) for v in x])
.gt(0)
.astype(int)
)
print(df)
印刷品:
日期排序
6 2021-12-28 zw12 0
7 2021-12-28 zw11 0
8 2021-12-28 zw13 0
9 2021-12-28 zw14 0
10 2021-12-26 zw11 1
0 2021-12-25 zw11 1
2021-12-23 zw12 1
2021-12-20 zw12 1
3 2021-12-19 zw11 1
5 2020-05-24 zw12 1
4 2020-05-22 ZW111 1
@Pysdm.gt
更大。类似于
哦,明白了!!非常感谢。