我试图删除组初始值之前的所有行。例如,如果mymax_value = 250
,则应删除该值之前组的所有行。如果该组的CONSEQUATIVE值再次显示为250或更低,则不会将其删除
import pandas as pd
df = pd.DataFrame({
'date': ['2019-01-01','2019-02-01','2019-03-01', '2019-04-01',
'2019-01-01','2019-02-01','2019-03-01', '2019-04-01',
'2019-01-01','2019-02-01','2019-03-01', '2019-04-01'],
'Asset': ['Asset A', 'Asset A', 'Asset A', 'Asset A', 'Asset A', 'Asset A', 'Asset B', 'Asset B',
'Asset B', 'Asset B', 'Asset B', 'Asset B'],
'Monthly Value': [100, 200, 300, 400, 500, 600, 100, 200, 300, 200, 300, 200]
})
unique_list = list(df['Asset'].unique())
max_value = 250
print(df)
date Asset Monthly Value
0 2019-01-01 Asset A 100
1 2019-02-01 Asset A 200
2 2019-03-01 Asset A 300
3 2019-04-01 Asset A 400
4 2019-01-01 Asset A 500
5 2019-02-01 Asset A 600
6 2019-03-01 Asset B 100
7 2019-04-01 Asset B 200
8 2019-01-01 Asset B 300
9 2019-02-01 Asset B 200
10 2019-03-01 Asset B 300
11 2019-04-01 Asset B 200
如果阈值或max_value
是250,那么数据帧应该如下所示(如下)。请注意,第一次为组检测到低于250的值时,所有这些行都将被删除。如果再次显示值250或更高,则保留该值。任何帮助都将不胜感激
date Asset Monthly Value
2 2019-03-01 Asset A 300
3 2019-04-01 Asset A 400
4 2019-01-01 Asset A 500
5 2019-02-01 Asset A 600
8 2019-01-01 Asset B 300
9 2019-02-01 Asset B 200
10 2019-03-01 Asset B 300
11 2019-04-01 Asset B 200
这应该可以做到:
收益率:
此外,如果将最大值存储在类似
max_value = {'Asset A': 250, 'Asset B': 250}
的字典中,则可以执行以下操作以获得相同的结果:你不需要
apply
。Groupby on boolean series创建用于切片所需输出的掩码。作为您的新要求,每个组在不同的max_value
上切片。您需要使用Asset
和max_value_list
的唯一值创建一个字典,并将其映射到Asset
列以创建一系列s
的max_值。最后,将Monthly Value
与s
和groupbycumsum
进行比较,以创建用于切片的掩码m
。(注意:我将样本更改为不同的值,以显示不同max_values
上的切片)相关问题 更多 >
编程相关推荐