做 groupby 时添加具有特定值的列

Add column with certain value when doing groupby

我有一个类似于以下内容的 DataFrame:

df:

date                          price     bool
---------------------------------------------
2022-01-03 22:00:00+01:00     109.65    False
2022-01-03 22:00:00+01:00      80.00    False
2022-01-03 22:00:00+01:00      65.79    True
2022-01-03 22:00:00+01:00      50.00    True
2022-01-03 23:00:00+01:00      47.00    False
2022-01-03 23:00:00+01:00      39.95    True
2022-01-03 23:00:00+01:00      39.47    False
2022-01-03 23:00:00+01:00      29.96    False
2022-01-03 23:00:00+01:00      22.47    True

如果我执行 df.groupby("date"),我的输出将是 2 groupby 个由 date 分隔的对象。这可以。但我想要的是为这两个添加一个新列,其中 max price 其中 bool == True 用于整个列。因此,生成的数据帧将变为:

df_groupby_object1:

date                          price     bool      max_price
-----------------------------------------------------------
2022-01-03 22:00:00+01:00     109.65    False      65.79
2022-01-03 22:00:00+01:00      80.00    False      65.79
2022-01-03 22:00:00+01:00      65.79    True       65.79
2022-01-03 22:00:00+01:00      50.00    True       65.79

df_groupby_object2:

date                           price     bool      max_price
-----------------------------------------------------------
2022-01-03 23:00:00+01:00      47.00    False      39.95
2022-01-03 23:00:00+01:00      39.95    True       39.95
2022-01-03 23:00:00+01:00      39.47    False      39.95
2022-01-03 23:00:00+01:00      29.96    False      39.95
2022-01-03 23:00:00+01:00      22.47    True       39.95

我可能只是遍历 groupby 对象,以这种方式创建一个额外的列,但我想知道这是否可以直接在 groupby 函数中完成?

使用GroupBy.transform for get maximal values only if Trues values in price. If not match price is NaN created by Series.where:

df['max_price'] = df['price'].where(df['bool']).groupby(df['date']).transform('max')

详情:

print (df['price'].where(df['bool']))
0      NaN
1      NaN
2    65.79
3    50.00
4      NaN
5    39.95
6      NaN
7      NaN
8    22.47
Name: price, dtype: float64