首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫群和删除行与数字是相近的彼此

熊猫群和删除行与数字是相近的彼此
EN

Stack Overflow用户
提问于 2022-10-31 09:36:34
回答 2查看 31关注 0票数 0

我有一个数据帧df

代码语言:javascript
复制
df = 

Code  Bikes  Year
12    356    2020 
4     378    2020 
2     389    2020
35    378    2021
40    370    2021
32    350    2021

我希望使用df.groupby(‘like’)根据年份对数据框架进行分组,并检查df‘ode’列中的关闭值,以找到至少接近3的值,并在df‘’Bikes‘列中保留一个最大值的行。

例如,在2020年的第一组中,值4和2至少接近3,因为4-2=2≤3,而与df‘’code‘=2对应的389 (df’‘Bikes’)是两者中最高的,因此保留这个值,并删除df‘’code‘=4的行。

给定示例的预期输出:

代码语言:javascript
复制
Code  Bikes  Year
12    356    2020  
2     389    2020
35    378    2021
40    370    2021
EN

回答 2

Stack Overflow用户

发布于 2022-10-31 10:14:59

您可以首先通过DataFrame.sort_values对两列的值进行排序,然后通过比较与treshold3和累积和的差异来创建组,最后使用DataFrameGroupBy.idxmax获得Bikes的最大索引,按Year和助手系列计算:

代码语言:javascript
复制
df1 = df.sort_values(['Year','Code'])
g = df1.groupby('Year')['Code'].diff().gt(3).cumsum()

df2 = df.loc[df1.groupby(['Year', g])['Bikes'].idxmax()].sort_index()
print (df2)
   Code  Bikes  Year
0    12    356  2020
2     2    389  2020
3    35    378  2021
4    40    370  2021
票数 1
EN

Stack Overflow用户

发布于 2022-10-31 10:21:35

代码语言:javascript
复制
new_df = df.sort_values(['Year', 'Code'])
new_df['diff'] = new_df['Code'] - new_df.groupby('Year')['Code'].shift()
new_df['cumsum'] = ((new_df['diff'] > 3) | (new_df['diff'].isna())).cumsum()
new_df = new_df.sort_values('Bikes', ascending=False).drop_duplicates(['cumsum']).sort_index()
new_df.drop(columns=['diff', 'cumsum'], inplace=True)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74261301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档