Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python idxmax的groupby没有给我所需的输出?_Python - Fatal编程技术网

Python idxmax的groupby没有给我所需的输出?

Python idxmax的groupby没有给我所需的输出?,python,Python,我有一个数据框,它有多个股票和O,H,L,C数据 我想创建一个新的数据框,它有每个股票的最大收盘价。我需要用于此目的的完整行项目 这是我的密码 Date Open High Low Close volume Stockname 0 2017-09-01 250.00 255.00 237.50 237.50 4658997 ABCAPITAL 1 2017-09-04 225.65 225.65 225.65 225.65 309923 AB

我有一个数据框,它有多个股票和O,H,L,C数据

我想创建一个新的数据框,它有每个股票的最大收盘价。我需要用于此目的的完整行项目

这是我的密码

Date    Open    High    Low Close   volume  Stockname
0   2017-09-01  250.00  255.00  237.50  237.50  4658997 ABCAPITAL
1   2017-09-04  225.65  225.65  225.65  225.65  309923  ABCAPITAL
2   2017-09-05  214.40  214.40  214.40  214.40  192377  ABCAPITAL
3   2017-09-06  203.70  203.70  203.70  203.70  267160  ABCAPITAL
4   2017-09-07  193.55  213.85  193.55  206.95  34241770    ABCAPITAL
... ... ... ... ... ... ... ...
1046    2020-03-26  125.05  133.15  119.00  128.75  12044426    ZEEL
1047    2020-03-27  132.00  138.65  127.00  128.05  8765500 ZEEL
1048    2020-03-30  122.30  135.00  122.30  125.65  8707583 ZEEL
1049    2020-03-31  130.50  130.65  123.00  123.95  8733424 ZEEL
1050    2020-04-01  124.00  126.75  120.00  120.90  6571551 ZEEL
即将到来的输出是完全错误的。收盘价不是每只股票的最高价格。请帮我做这个

x = new.groupby('Stockname')
new.loc[x['Close'].idxmax()]

这给了我你想要的东西:

Date    Open    High    Low Close   volume  Stockname
0   2017-09-01  250.00  255.00  237.50  237.50  4658997 ABCAPITAL
0   2016-01-01  233.00  263.45  232.00  248.00  307528  ABFRL
0   2016-01-01  1362.00 1380.40 1360.00 1373.65 161982  ACC
0   2016-01-01  261.00  268.30  260.10  267.55  1347893 ADANIPORTS
0   2016-01-01  32.50   34.40   32.30   34.00   12331921    ADANIPOWER
... ... ... ... ... ... ... ...
506 2018-01-16  232.90  237.20  229.20  233.00  1198721 VGUARD
506 2018-01-16  635.00  639.95  618.50  623.05  921801  VOLTAS
506 2018-01-16  1529.95 1538.65 1499.00 1507.75 18023   WHIRLPOOL
506 2018-01-16  238.27  251.13  237.59  249.59  6166445 WIPRO
506 2018-01-16  610.40  618.30  607.50  613.40  4805427 ZEEL
或:

或:

事实上,根据上述评论中的@jcalize,摘自和。所有这些都归结为以下结果:




如果这样做有效,请相信原始海报,我只是复制了工作代码。

检查我做了完全相同的事情,但没有得到输出是的,我看到了这个解决方案。这不能通过idxmax()完成吗?是的,甚至我在-df=df.loc[df.groupby('Stockname')['Close'].idxmax()]之前也使用了相同的代码&它不起作用。我将输出发布到上面的代码。不知道你为什么像我展示的那样在一行中尝试过@约瑟法拉斯塔。这对我来说很好。你的两行法,是不是,我试过同样的一行,但仍然不起作用。不知道为什么,我会使用转换功能,然后。感谢Jvdv的帮助。向上投票
df = df[df.groupby(['Stockname'])['Close'].transform(max) == df['Close']]
df = df.loc[df.groupby('Stockname')['Close'].idxmax()]
df = df.sort_values('Close', ascending=False).drop_duplicates('Stockname')
          Date    Open    High    Low   Close    volume  Stockname
0   2017-09-01  250.00  255.00  237.5  237.50   4658997  ABCAPITAL
506 2020-03-26  125.05  133.15  119.0  128.75  12044426       ZEEL