我有一个看起来像这样的数据框:
df = pd.DataFrame({'ID': [4]*2 +[5]*4 , 'Timestamp' : pd.date_range('2000-01-01', periods=6)})
ID Timestamp
0 4 2000-01-01
1 4 2000-01-02
2 5 2000-01-03
3 5 2000-01-04
4 5 2000-01-05
5 5 2000-01-06
我希望标识ID列中的最后一个条目(标记为0)。因此,所需的输出应类似于:
ID Timestamp last
0 4 2000-01-01 -
1 4 2000-01-02 0
2 5 2000-01-03 -
3 5 2000-01-04 -
4 5 2000-01-05 -
5 5 2000-01-06 0
我该怎么做?我尝试使用df.duplicated('ID')的各种选项,但可以删除最后一个条目,但不能识别/标记最后一个条目
答案 0 :(得分:2)
添加参数keep='last'
来返回mask
,其中True
代表最后的值,False
代表最后的值:
df['last'] = np.where(df.duplicated('ID', keep='last'), '-', '0')
print (df)
ID Timestamp last
0 4 2000-01-01 -
1 4 2000-01-02 0
2 5 2000-01-03 -
3 5 2000-01-04 -
4 5 2000-01-05 -
5 5 2000-01-06 0
详细信息:
print (df.duplicated('ID', keep='last'))
0 True
1 False
2 True
3 True
4 True
5 False
dtype: bool
答案 1 :(得分:1)
使用GroupBy.tail
:
df.loc[df.groupby('ID').tail(1).index, 'last'] = 0
print(df)
# ID Timestamp last
# 0 4 2000-01-01 NaN
# 1 4 2000-01-02 0.0
# 2 5 2000-01-03 NaN
# 3 5 2000-01-04 NaN
# 4 5 2000-01-05 NaN
# 5 5 2000-01-06 0.0