获取每个组的前n个条目,其中每个组的n不同

时间:2018-08-30 13:27:43

标签: python pandas dataframe

想象有这个df:

group  time                 index  cutoff
A      2018-04-01 05:07:00  0.8    2
A      2018-04-01 05:07:00  0.7    2
A      2018-04-01 05:07:00  0.6    2
B      2018-04-01 05:57:00  0.9    4
B      2018-04-01 05:57:00  0.87   4
B      2018-04-01 05:57:00  0.7    4
B      2018-04-01 05:57:00  0.67   4
B      2018-04-01 05:57:00  0.5    4
B      2018-04-01 05:57:00  0.47   4

我想将此df更改为:

group  time                 index  cutoff
A      2018-04-01 05:07:00  0.8    2
A      2018-04-01 05:07:00  0.7    2
B      2018-04-01 05:57:00  0.9    4
B      2018-04-01 05:57:00  0.87   4
B      2018-04-01 05:57:00  0.7    4
B      2018-04-01 05:57:00  0.67   4

这意味着对于每个分组(组,时间),均按索引排序,并且仅选择前n个条目,其中n等于每个组在“截止”中指定的截止值。

感谢您的帮助。 预先感谢!

1 个答案:

答案 0 :(得分:1)

GroupBy.applyDataFrame.head使用自定义功能,并按iat每组选择第一个值cutoff

df = df.groupby('group', group_keys=False).apply(lambda x: x.head(x['cutoff'].iat[0]))
print (df)
  group                 time  index  cutoff
0     A  2018-04-01 05:07:00   0.80       2
1     A  2018-04-01 05:07:00   0.70       2
3     B  2018-04-01 05:57:00   0.90       4
4     B  2018-04-01 05:57:00   0.87       4
5     B  2018-04-01 05:57:00   0.70       4
6     B  2018-04-01 05:57:00   0.67       4