Python idxmax的groupby没有给我所需的输出?
我有一个数据框,它有多个股票和O,H,L,C数据 我想创建一个新的数据框,它有每个股票的最大收盘价。我需要用于此目的的完整行项目 这是我的密码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
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