gpt4 book ai didi

python - idxmax() 不适用于包含 NaN 的 SeriesGroupBy

转载 作者:行者123 更新时间:2023-11-30 23:08:29 24 4
gpt4 key购买 nike

这是我的代码

from pandas import DataFrame, Series
import pandas as pd
import numpy as np
income = DataFrame({'name': ['Adam', 'Bill', 'Chris', 'Dave', 'Edison', 'Frank'],
'age': [22, 24, 31, 45, 51, 55],
'income': [1000, 2500, 1200, 1500, 1300, 1600],
})
ageBin = pd.cut(income.age, [20, 30, 40, 50, 60])
grouped = income.groupby([ageBin])
highestIncome = income.ix[grouped.income.idxmax()]

我有一个包含姓名、年龄和收入的 DataFrame,如下所示:

index   age income  name
0 22 1000 Adam
1 24 2500 Bill
2 31 1200 Chris
3 45 1500 Dave
4 51 1300 Edison
5 55 1600 Frank

我想按年龄组对数据进行分组,并收集收入最高的记录。上面的代码有效并且 highestIncome是:

index   age income  name
1 24 2500 Bill
2 31 1200 Chris
3 45 1500 Dave
5 55 1600 Frank

但是,如果我删除 Chris 的记录,从而在 (30, 40] 年龄范围内没有记录,我会在 ValueError 处得到 grouped.income.idxmax() 。我认为这是是因为分组中的NaN,但我找不到解决问题的方法。任何输入表示赞赏。

更新:非常感谢您的回答。我确实相信这是 groupby 对象的 idxmax() 上的错误。我想选择agg(lambda x: x.idxmax())方法,因为我测试了使用 sort() 的速度与 agg(lambda x: x.idxmax()在 1000 万个合成数据集上。这是代码和输出:

from pandas import DataFrame, Series
import pandas as pd
import numpy as np
import time

testData = DataFrame({'key': np.random.randn(10000000),
'value': np.random.randn(10000000)})
keyBin = pd.cut(testData.key, 1000)

start = time.time()
grouped1 = testData.sort('value', ascending=False).groupby([keyBin])
highestValues1 = testData.ix[grouped1.head(1).index]
end = time.time()
print end - start

start = time.time()
grouped2 = testData.groupby([keyBin])
highestValues2 = testData.ix[grouped2.value.agg(lambda x: x.idxmax())].dropna(how='all')
end = time.time()
print end - start
#validation
(highestValues1.sort() == highestValues2.sort()).all()

输出:

5.30953717232
1.0279238224

Out[47]:

key True
value True
dtype: bool

最佳答案

grouped['income'].agg(lambda x : x.idxmax())


Out[]:
age
(20, 30] 1
(30, 40] NaN
(40, 50] 2
(50, 60] 4
Name: income, dtype: float64

然后你可以执行以下操作来获取数据

income.ix[result.values].dropna()

关于python - idxmax() 不适用于包含 NaN 的 SeriesGroupBy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31690493/

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