Python 基于条件在某些组上的转换创建新列
在分组后,是否有更有效的方法来执行以下操作 对于每个Python 基于条件在某些组上的转换创建新列,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,在分组后,是否有更有效的方法来执行以下操作 对于每个组,我想获得最大值,其中时间为我认为在分组之前可以使用where。要获得更好的性能,请使用转换: df['new_value'] = df['values'].where(df.times < 3).groupby(df.group).transform('max') df group times values new_value 0 1 0 0.271137 0.751412 1
组
,我想获得最大值
,其中时间
为我认为在分组之前可以使用where
。要获得更好的性能,请使用转换:
df['new_value'] = df['values'].where(df.times < 3).groupby(df.group).transform('max')
df
group times values new_value
0 1 0 0.271137 0.751412
1 1 1 0.262456 0.751412
2 1 2 0.751412 0.751412
3 1 3 0.364099 0.751412
4 1 4 0.462447 0.751412
5 2 0 0.022403 0.792396
6 2 1 0.792396 0.792396
7 2 2 0.181434 0.792396
8 2 3 0.106931 0.792396
9 2 4 0.226425 0.792396
10 3 0 0.425845 0.535085
11 3 1 0.527567 0.535085
12 3 2 0.535085 0.535085
13 3 3 0.194340 0.535085
14 3 4 0.958947 0.535085
酷。你知道为什么按多列分组会失败吗?在执行此操作之前,实际数据集有三个分组,我似乎无法将此处发布的groupby语法用于多个列…@anon01您的语法将略有不同。使用.groupby([df['col1']、df['col2']、…])
在传递给groupby的列表中将每列指定为单独的元素。。
for label, group in df.groupby(['group']):
rows = group.index
df.loc[rows,'new_value'] = group.loc[group.time <= 3, 'values'].max()
df['new_value'] = df['values'].where(df.times < 3).groupby(df.group).transform('max')
df
group times values new_value
0 1 0 0.271137 0.751412
1 1 1 0.262456 0.751412
2 1 2 0.751412 0.751412
3 1 3 0.364099 0.751412
4 1 4 0.462447 0.751412
5 2 0 0.022403 0.792396
6 2 1 0.792396 0.792396
7 2 2 0.181434 0.792396
8 2 3 0.106931 0.792396
9 2 4 0.226425 0.792396
10 3 0 0.425845 0.535085
11 3 1 0.527567 0.535085
12 3 2 0.535085 0.535085
13 3 3 0.194340 0.535085
14 3 4 0.958947 0.535085
df['values'].where(df.times <= 3)
0 0.271137
1 0.262456
2 0.751412
3 0.364099
4 NaN
5 0.022403
6 0.792396
7 0.181434
8 0.106931
9 NaN
10 0.425845
11 0.527567
12 0.535085
13 0.194340
14 NaN
Name: values, dtype: float64