根据datafram中的阈值返回前n行

2024-09-27 18:07:19 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的输入数据帧:

df = pd.DataFrame({'Company':['A','B','C','D','E','F'],'Industry':['Metals','Metals','IT','IT','IT','banking'],'ROE':[10,9,5,14,1,9],'ROCE':[10,5,5,1,10,9],'Threshold':[1,1,2,2,2,1]});df

需要输出如下:

dfout = pd.DataFrame({'Company':['A','D','E','F'],'Industry':['Metals','IT','IT','banking'],'ROE':[10,14,1,9],'ROCE':[10,1,10,9],'Threshold':[1,2,2,1]});dfout

逻辑:获取每个行业ROE和ROCE最高的行。N是数据帧中的“阈值”列。感谢你在这方面的意见。非常感谢。你知道吗


Tags: 数据dataframedfthresholdit逻辑companypd
1条回答
网友
1楼 · 发布于 2024-09-27 18:07:19

首先,按ROE/ROCE对数据进行排序:

df = df.iloc[(-np.maximum(df.ROCE, df.ROE)).argsort()]

接下来,使用groupby+apply

df.groupby('Industry', group_keys=False, sort=False).apply(
    lambda x: x[:x['Threshold'].unique().item()]
).sort_index()

或者

df.groupby('Industry', group_keys=False, sort=False).apply(
    lambda x: x.head(x['Threshold'].unique().item())
).sort_index()

  Company Industry  ROCE  ROE  Threshold
0       A   Metals    10   10          1
3       D       IT     1   14          2
4       E       IT    10    1          2
5       F  banking     9    9          1

相关问题 更多 >

    热门问题