gpt4 book ai didi

Python/ Pandas : groupby/find specific row/drop all rows below

转载 作者:行者123 更新时间:2023-12-01 08:34:44 25 4
gpt4 key购买 nike

我有一个数据框 - 我想删除每个组的特定行(“id”):

id - month - max 
1 - 112016 - 41
1 - 012017 - 46
1 - 022017 - 156
1 - 032017 - 164
1 - 042017 - 51
2 - 042017 - 26
2 - 052017 - 156
2 - 062017 - 17
  • 对于每个“id”,查找第一行(按“月份”排序)的位置,其中“max”> 62
  • 保留上面的所有行(在该组内),删除其余行

预期结果:

id - month - max 
1 - 112016 - 41
1 - 012017 - 46
2 - 042017 - 26

我能够识别每个组必须删除的第一行,但从那时起我就陷入困境:

df[df.max > 62].sort_values(['month'], ascending=[True]).groupby('id', as_index=False).first()

如何消除行?

最诚挚的问候,大卫

最佳答案

用途:

#convert to datetimes
df['month'] = pd.to_datetime(df['month'], format='%m%Y')
#sorting per groups if necessary
df = df.sort_values(['id','month'])
#comopare by gt (>) for cumulative sum per groups and filter equal 0
df1= df[df['max'].gt(62).groupby(df['id']).cumsum().eq(0)]
print (df1)

id month max
0 1 2016-11-01 41
1 1 2017-01-01 46

或者如果还需要第一个值>62,则使用自定义函数:

#convert to datetimes
df['month'] = pd.to_datetime(df['month'], format='%m%Y')
#sorting per groups if necessary
df = df.sort_values(['id','month'])

def f(x):
m = x['max'].gt(62)
first = m[m].index[0]
x = x.loc[ :first]
return x

df = df.groupby('id', group_keys=False).apply(f)
print (df)

id month max
0 1 2016-11-01 41
1 1 2017-01-01 46
2 1 2017-02-01 156
5 2 2017-04-01 83

关于Python/ Pandas : groupby/find specific row/drop all rows below,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53777281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com