我正在尝试删除组初始值之前的所有行。例如,如果我的max_value = 250
,则应删除该值之前的组的所有行。如果该组的结果值再次小于或等于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
答案 0 :(得分:5)
这应该可以解决问题:
df[df.groupby('Asset')['Monthly Value'].apply(lambda x: x.gt(max_value).cumsum().ne(0))]
收益:
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}
之类的字典中,则可以执行以下操作以获得相同的结果:
df[df.groupby('Asset')['Monthly Value'].apply(lambda x: x.gt(max_value[x.name]).cumsum().ne(0))]
答案 1 :(得分:2)
您不需要@code{
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
await JSRuntime.InvokeVoidAsync("highlightMenu");
}
}
}
。在布尔系列上使用Groupby创建遮罩以对所需的输出进行切片。作为您的新要求,每个组应切成不同的apply
。您需要使用max_value
和Asset
的唯一值创建字典,并将其映射到max_value_list
列以创建一系列Asset
的max_values。最后,将s
与Monthly Value
进行比较,并按s
分组以创建用于切片的掩码cumsum
。 (注意:我将您的示例更改为不同的值,以显示在不同的m
上的切片)
max_values