想象有这个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等于每个组在“截止”中指定的截止值。
感谢您的帮助。 预先感谢!
答案 0 :(得分:1)
对GroupBy.apply
和DataFrame.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