问题描述
在python中,如何获取以另一个值为条件的组中的最小日期。
例如因此,在下面,我希望通过id来确定最小日期,其中value == 1,或者如果不存在等于1的值(value == 1),则要在value == 0的最小日期。
|----|--------------|-------------|
| id | date | value |
|----|--------------|-------------|
| 1 | 2020-01-01 | 1 |
| 1 | 2020-01-04 | 1 |
| 1 | 2020-01-05 | 1 |
| 2 | 2020-01-01 | 1 |
| 3 | 2020-01-01 | 0 |
| 3 | 2020-01-05 | 1 |
| 4 | 2020-01-05 | 0 |
|----|--------------|-------------|
期望:
|----|--------------|-------------|
| id | date | value |
|----|--------------|-------------|
| 1 | 2020-01-01 | 1 |
| 2 | 2020-01-01 | 1 |
| 3 | 2020-01-05 | 1 |
| 4 | 2020-01-05 | 0 |
|----|--------------|-------------|
解决方法
在所有3列中都使用DataFrame.sort_values
,然后在id
列中使用DataFrame.drop_duplicates
删除重复项:
df['date'] = pd.to_datetime(df['date'])
df = (df.sort_values(['id','value','date'],ascending=[True,False,True])
.drop_duplicates(['id']))
print (df)
id date value
0 1 2020-01-01 1
3 2 2020-01-01 1
5 3 2020-01-05 1
6 4 2020-01-05 0