做 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 True
s 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
我有一个类似于以下内容的 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 True
s 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