第一次出现在Pandas Dataframe 中

kse8i1jr  于 2023-08-01  发布在  其他
关注(0)|答案(3)|浏览(98)

我有以下按日期排序的数据框

df = pd.DataFrame({"Date":['2023-02-11','2023-02-10','2023-02-09','2023-02-08','2023-02-07','2023-02-06','2023-02-05'],
                   "A":['a','a','c','a','c','b','b'],
                   "B":[1,2,3,4,5,6,7]})

个字符
我想创建一个新的列FirstTime,如果这是符号第一次出现在A中,则等于1,否则等于0。所以想要的结果看起来像是

Date        A   B   FirstTIme
2023-02-11  a   1   0
2023-02-10  a   2   0
2023-02-09  c   3   0
2023-02-08  a   4   1
2023-02-07  c   5   1
2023-02-06  b   6   0
2023-02-05  b   7   1


我知道idxmax和searchsorted方法,但不确定它是否有帮助。

p4rjhz4m

p4rjhz4m1#

由于您的数据按Date递减排序,您可以只使用duplicated。如果数据未排序,则按此排序。

df['FirstTime'] = 1 - df['A'].duplicated(keep='last').astype(int)

字符串
输出量:

Date  A  B  FirstTime
0  2023-02-11  a  1          0
1  2023-02-10  a  2          0
2  2023-02-09  c  3          0
3  2023-02-08  a  4          1
4  2023-02-07  c  5          1
5  2023-02-06  b  6          0
6  2023-02-05  b  7          1

wnrlj8wa

wnrlj8wa2#

对日期排序的数据使用duplicated

df['FirstTime'] = df.sort_values(by='Date')['A'].duplicated().rsub(1)

字符串
如果数据已按递减日期排序:

df['FirstTime'] = df['A'].duplicated(keep='last').rsub(1)


输出量:

Date  A  B  FirstTime
0  2023-02-11  a  1          0
1  2023-02-10  a  2          0
2  2023-02-09  c  3          0
3  2023-02-08  a  4          1
4  2023-02-07  c  5          1
5  2023-02-06  b  6          0
6  2023-02-05  b  7          1

u3r8eeie

u3r8eeie3#

如何使用drop_duplicates with keep = last如下?

df['FirstTime'] = 0
df.loc[df.drop_duplicates(subset = ['A'], keep = 'last').index, 'FirstTime'] = 1

字符串

相关问题