如何在Pandas中根据其他行单元格值添加一行单元格值?

5hcedyr0  于 2022-12-09  发布在  其他
关注(0)|答案(1)|浏览(184)

我有一个Pandas数据框,如下所示
| 识别码|日期|援助|
| - -|- -|- -|
| 第0页|2022年1月1日|一个|
| 一个|2022年1月1日|两个|
| 2个|2022年1月5日|一个|
| 三个|2022年1月6日|三个|
| 四个|2022年1月2日|一个|
| 五个|2022年1月1日|一个|
我想添加一个列“计数器”,对于每一行,它将包含具有相同“Aid”和“Date”的行数,这些行的“Date”小于或等于该行的“Date”
因此,对于行4,“计数器”= 3(行0、4、5)。
结果应该是:
| 识别码|日期|援助|计数器|
| - -|- -|- -|- -|
| 第0页|2022年1月1日|一个|2个|
| 一个|2022年1月1日|两个|一个|
| 2个|2022年1月5日|一个|四个|
| 三个|2022年1月6日|三个|一个|
| 四个|2022年1月2日|一个|三个|
| 五个|2022年1月1日|一个|2个|
有没有办法在Pandas身上做这个计数呢?
原始 Dataframe 包含数百万行,因此效率非常重要

yyyllmsg

yyyllmsg1#

rank,使用最大值方法

pd.to_datetime(df['Date']).groupby(df['Aid']).rank(method='max').astype('int')

输出:

0    2
1    1
2    4
3    1
4    3
5    2
Name: Date, dtype: int32

输出到计数器列

df.assign(Counter=pd.to_datetime(df['Date']).groupby(df['Aid']).rank(method='max').astype('int'))

实验结果:

Id  Date        Aid     Counter
0   2022-01-01  one     2
1   2022-01-01  two     1
2   2022-01-05  one     4
3   2022-01-06  three   1
4   2022-01-02  one     3
5   2022-01-01  one     2

相关问题