如何以 python 中的另一组为条件按组获取最小值?

How to get min value by group conditional on another group in python?

在 python 中,如何根据另一个值获取组中的最小日期。

例如所以在下面我想要按 id 的最小日期,其中值 == 1 或者如果没有值等于 1(值 == 1)那么最小日期值 == 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        |
|----|--------------|-------------|

使用DataFrame.sort_values by all 3 columns and then remove duplicates by id column with 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