如何在python中另一个组的条件下按组获取最小值?

问题描述

在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