我有一个数据帧df
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的行。
给定示例的预期输出:
Code Bikes Year
12 356 2020
2 389 2020
35 378 2021
40 370 2021发布于 2022-10-31 10:14:59
您可以首先通过DataFrame.sort_values对两列的值进行排序,然后通过比较与treshold3和累积和的差异来创建组,最后使用DataFrameGroupBy.idxmax获得Bikes的最大索引,按Year和助手系列计算:
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发布于 2022-10-31 10:21:35
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)https://stackoverflow.com/questions/74261301
复制相似问题