- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用“最大”获取前“n”个结果,但我认为这种行为很奇怪。如果有人能帮助我理解为什么会出现这种行为,那就太好了。
filter = pd.DataFrame([['user1','item2',2,1],
['user1','item1',2,0.666667],
['user1','item3',2,0.500000]],
columns=['user_id','item_id','num_transactions','RCP'])
sort_RCP_df = (
filter.set_index("item_id")
.groupby(["user_id"])["RCP"]
.nlargest(2)
.reset_index()
)
print(sort_RCP_df)
user_id item_id RCP
user1 item2 1.000000
user1 item1 0.666667
如果我保留 nlargest(2),那么我会得到正确的输出,但如果我将值更改为 3,我只会得到列 item_id 和 RCP。
filter = pd.DataFrame([['user1','item2',2,1],
['user1','item1',2,0.666667],
['user1','item3',2,0.500000]],
columns=['user_id','item_id','num_transactions','RCP'])
sort_RCP_df = (
filter.set_index("item_id")
.groupby(["user_id"])["RCP"]
.nlargest(3)
.reset_index()
)
print(sort_RCP_df)
item_id RCP
item2 1.000000
item1 0.666667
item3 0.500000
为什么 nlargest = 3 时列 'user_id' 没有出现?
如果这是预期的行为,有没有办法让“user_id”也成为输出的一部分?
最佳答案
文档暗示了问题的原因,因为在注释中他们明确指出了性能方面的考虑:
Faster than
.sort_values(ascending=False).head(n)
for small n relative to the size of the Series object.
如果深入查看代码,Series.nlargest
/Series.nsmallest
由 SelectNSeries
处理pandas/core/algorithms 中的类。根据相对于 Series 长度的 n
,此类具有不同的行为:
# slow method
if n >= len(self.obj):
ascending = method == "nsmallest"
return dropped.sort_values(ascending=ascending).head(n)
# fast method
arr, new_dtype = _ensure_data(dropped.values)
if method == "nlargest":
arr = -arr
if is_integer_dtype(new_dtype):
# GH 21426: ensure reverse ordering at boundaries
arr -= 1
...
这里的关键是,当 n >= length of Series
时,调用不使用正常算法来计算最大值/最小值,而是使用 计算它排序值
+ head
。如果我们用此逻辑替换您的 nlargest 调用,我们可以看到它手动匹配您的输出。
sort_RCP_df = (
filter.set_index("item_id")
.groupby(["user_id"])["RCP"]
.apply(lambda s: s.sort_values(ascending=False).head(2))
.reset_index()
)
# user_id item_id RCP
#0 user1 item2 1.000000
#1 user1 item1 0.666667
关于python - 'nlargest' 返回奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70354691/
我正在尝试使用“最大”获取前“n”个结果,但我认为这种行为很奇怪。如果有人能帮助我理解为什么会出现这种行为,那就太好了。 filter = pd.DataFrame([['user1','item2'
我有一个数据框 ID CAT SCORE 0 0 0 8325804 1 0 1 1484405 ...
我有一本包含 {key: count} 的字典,比如说status_count = {'管理分析':13859,'计算机程序员':72112}我正在尝试为 heapq.nlargest() 编写一个键
我想获取数据集中每年前 10 个“净利润”的平均值,并将其存储在新的 df 中。这是我目前所拥有的。 #loading the csv file df = pd.read_csv('tmdb-movi
努力将 .nlargest() 应用于我的 groupedby 数据,以便仅显示每个索引的总收入最大的 10 个 [0] Groupedby 数据如下所示: 当我运行时: grp_data.n_lar
我有以下示例 DataFrame 定义如下: df1 = pandas.DataFrame(data = {"Age":[28, 3, 32, 18], "Student":[False, True,
我在看 this pycon talk, 34:30演讲者说得到t n 列表中的最大元素元素可以在 O(t + n) 中完成. 这怎么可能?我的理解是创建堆将是 O(n) ,但是 nlargest 的
有谁知道如何将 heapq.nlargest 与百分比而不是数字一起使用?目前我有 heapq.nlargest(187030, y) 但这让我得到了前 187030 个数字。我需要它来为每个数组获取
这是 Pandas 文档 v0.22.0 中的示例: In [330]: df = pd.DataFrame({'a': [-2, -1, 1, 10, 8, 11, -1],
我有一个如下所示的DataFrame: name value date 2016-05-01 kelly 20 2016-05-05 john
此问题是以下帖子的延伸:select largest N of a column of each groupby group using pandas 让我们使用相同的 df 和所选答案中提出的解决方
我有这个数据集: Id query count 001 abc 20 001 bcd 30 001 ccd 100 002 ace 13 002 ahhd 30
我有一个 Dataframe df,我尝试在其中使用 groupby 和 nlargest ,但无法获得我想要的输出: Date Symbol Count 0 20
这个问题在这里已经有了答案: Pandas groupby nlargest sum (2 个答案) 关闭 6 年前。 我有一个这样的数据框: Index STNAME COUNTY COU
假设我有一个数字列表: my_list = [3, 8, 4, 2, 8, 1, 1, 2, 5, 1] 我现在想找到这个列表中 2 个最大数字的索引。所以,我尝试: import heapq max
我有每周的贸易导出时间序列数据,我需要制作堆积条形图来可视化贸易事件。为此,我汇总了所有行的每一列的总和数据,然后使用 nlargest() 选择前 n 列。但是,这样做可能不太准确,因为我在循环中为
因此,使用 .nlargest 我可以从数据框中获取前 N 个值。 现在如果我运行以下代码: df.nlargest(25, 'Change')['TopN']='TOP 25' 我希望将 TopN
因此,使用 .nlargest 我可以从数据框中获取前 N 个值。 现在如果我运行以下代码: df.nlargest(25, 'Change')['TopN']='TOP 25' 我希望将 TopN
我想检索与包含 n 个最大值的列集相对应的 n 个列名。然后,仅当值高于给定阈值时,这些名称才会保留在列表中。 举个例子,给定三列“Paul”、“Eric”、“Marc”,假设我最多需要 2 个列名,
我从下面的列表中构建了一个 DataFrame df_list_1 = [{"animal": "dog", "color": "red", "age": 4, "n_legs": 4,},
我是一名优秀的程序员,十分优秀!