我有这样一个df:

month stock MV
1994-07 A 50
1994-07 B 60
1994-07 C 70
1994-07 D 80
1994-08 A 90
1994-08 B 60
1994-08 C 70
1994-08 D 95
1994-08 E 100
1994-08 F 110

我想将我的df细分为每月最高MV的50%.1994年7月,我只有4支股票,所以50%将是最高的2支.在接下来的一个月里,我有6只股票,这给了我3个最高值:

month stock MV
1994-07 C 70
1994-07 D 80
1994-08 D 95
1994-08 E 100
1994-08 F 110

我试过:

df = df.groupby(pd.Grouper(freq="M")).nlargest(2, "MV")

但我得到了一个错误:AttributeError:'DataFrameGroupBy'对象没有属性'NLAGEST'

推荐答案

您需要使用apply并计算最终长度:

df.groupby(pd.Grouper(freq="M")).apply(lambda g: g.nlargest(len(g)//2, 'MV'))

将提供的数据作为字符串:

(df.groupby('month', as_index=False, group_keys=False) # use pd.Grouper if needed here
   .apply(lambda g: g.nlargest(len(g)//2, 'MV'))
   .sort_values(by=['month', 'MV'])
)

输出:

     month stock   MV
2  1994-07     C   70
3  1994-07     D   80
7  1994-08     D   95
8  1994-08     E  100
9  1994-08     F  110

Python相关问答推荐

两极:滚动组,起始指数由不同列设置

Tkinter滑动条标签.我不确定如何删除滑动块标签或更改其文本

如何将桌子刮成带有Se的筷子/要求/Beautiful Soup ?

计算所有前面行(当前行)中列的值

如何计算两极打印机中 * 所有列 * 的出现次数?

对Numpy函数进行载体化

如何将ctyles.POINTER(ctyles.c_float)转换为int?

如何使用pandasDataFrames和scipy高度优化相关性计算

SQLGory-file包FilField不允许提供自定义文件名,自动将文件保存为未命名

max_of_three使用First_select、second_select、

对某些列的总数进行民意调查,但不单独列出每列

追溯(最近最后一次调用):文件C:\Users\Diplom/PycharmProject\Yolo01\Roboflow-4.py,第4行,在模块导入roboflow中

可变参数数量的重载类型(args或kwargs)

PyQt5,如何使每个对象的 colored颜色 不同?'

无法在Docker内部运行Python的Matlab SDK模块,但本地没有问题

python中的解释会在后台调用函数吗?

如何更新pandas DataFrame上列标题的de值?

AES—256—CBC加密在Python和PHP中返回不同的结果,HELPPP

如何找出Pandas 图中的连续空值(NaN)?

Gekko中基于时间的间隔约束