gpt4 book ai didi

python - groupby 按列的最大值并返回完整的行

转载 作者:行者123 更新时间:2023-12-01 09:07:32 30 4
gpt4 key购买 nike

我有一个包含 5 个不同列的数据框。我的实际问题是使用 max() 对特定字段进行分组,并返回满足此条件的行。

示例(我放置了代码和数据框的打印屏幕):

A = pd.DataFrame([[datetime(2005,1,1), datetime(2005,1,2),  1240, 1234, 12],\
[datetime(2005,1,1), datetime(2005,1,2), 1250, 1235, 13],
[datetime(2005,1,1), datetime(2005,1,3), 1230, 1235, 12],
[datetime(2005,1,1), datetime(2005,1,3), 1240, 1235, 13],
[datetime(2005,1,1), datetime(2005,1,4), 1240, 1235, 12],
[datetime(2005,1,1), datetime(2005,1,5), 1240, 1235, 13],
[datetime(2005,1,1), datetime(2005,1,5), 1240, 1233, 11],
[datetime(2005,1,1), datetime(2005,1,6), 1240, 1235, 14]], \
columns=['quote_date', 'expiration', 'strike', 'price', 'var']).set_index(['quote_date', 'expiration', 'strike'])

enter image description here

如果我按罢工进行分组,我将仅获得quote_date到期罢工:

A.reset_index().groupby(by = ['quote_date', 'expiration'])['strike'].max()

enter image description here

目标是获取以下数据帧:

enter image description here

最佳答案

使用DataFrameGroupBy.idxmax使用默认索引,因此有必要第一步 reset_index :

A = A.reset_index()
df = A.loc[A.groupby(by = ['quote_date', 'expiration'])['strike'].idxmax()]
print (df)
quote_date expiration strike price var
1 2005-01-01 2005-01-02 1250 1235 13
3 2005-01-01 2005-01-03 1240 1235 13
4 2005-01-01 2005-01-04 1240 1235 12
5 2005-01-01 2005-01-05 1240 1235 13
7 2005-01-01 2005-01-06 1240 1235 14

对于MultiIndex添加set_index :

A = A.reset_index()
df = (A.loc[A.groupby(by = ['quote_date', 'expiration'])['strike'].idxmax()]
.set_index(['quote_date','expiration']))
print (df)
strike price var
quote_date expiration
2005-01-01 2005-01-02 1250 1235 13
2005-01-03 1240 1235 13
2005-01-04 1240 1235 12
2005-01-05 1240 1235 13
2005-01-06 1240 1235 14

另一个解决方案:

df = (A.sort_values('var', ascending=False)
.reset_index(level=['strike'])
.groupby(by = ['quote_date', 'expiration'])
.first()
)
print (df)
strike price var
quote_date expiration
2005-01-01 2005-01-02 1250 1235 13
2005-01-03 1240 1235 13
2005-01-04 1240 1235 12
2005-01-05 1240 1235 13
2005-01-06 1240 1235 14

关于python - groupby 按列的最大值并返回完整的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51926443/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com