作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
问题
在以下数据框中 df
:
import random
import pandas as pd
random.seed(999)
sz = 50
qty = {'one': 1, 'two': 2, 'three': 3}
thing = (random.choice(['one', 'two', 'three']) for _ in range(sz))
order = (random.choice(['ascending', 'descending']) for _ in range(sz))
value = (random.randint(0, 100) for _ in range(sz))
df = pd.DataFrame({'thing': thing, 'order': order, 'value': value})
... 我想要:
thing
分组order
拆分value
排序为 thing
根据其 order
qty
为此thing
thing order value
0 one ascending 17
1 one descending 1
2 two ascending 28
3 two ascending 30
4 two descending 13
5 two descending 38
6 three ascending 6
7 three ascending 27
8 three ascending 35
9 three descending 4
10 three descending 5
11 three descending 6
手动编码以通过以下方式获得结果:
one_a = df[(df.thing == 'one') & (df.order == 'ascending')].reset_index(drop=True).sort_values('value', ascending='True').head(qty['one'])
one_d = df[(df.thing == 'one') & (df.order == 'descending')].reset_index(drop=True).sort_values('value', ascending='False').head(qty['one'])
two_a = df[(df.thing == 'two') & (df.order == 'ascending')].reset_index(drop=True).sort_values('value', ascending='True').head(qty['two'])
two_d = df[(df.thing == 'two') & (df.order == 'descending')].reset_index(drop=True).sort_values('value', ascending='False').head(qty['two'])
three_a = df[(df.thing == 'three') & (df.order == 'ascending')].reset_index(drop=True).sort_values('value', ascending='True').head(qty['three'])
three_d = df[(df.thing == 'three') & (df.order == 'descending')].reset_index(drop=True).sort_values('value', ascending='False').head(qty['three'])
print(pd.concat([one_a, one_d, two_a, two_d, three_a, three_d], ignore_index=True))
题
groupby
来实现这一点? ,
sort_values
和
set_index
?
最佳答案
一个问题是选择ascending
和 descending
分别地。我们可以通过反转 descending
来解决这个问题:
df.loc[df.order=='descending','value']*= -1
s=(df.sort_values('value').groupby(['thing','order'])
.cumcount()
.reindex(df.index)
)
out = df[s<df['thing'].map(qty)].sort_values(['thing','order'])
out.loc[out.order=='descending', 'value'] *= 1
输出:
thing order value
14 one ascending 17
27 one descending 1
13 three ascending 6
17 three ascending 35
38 three ascending 27
4 three descending 5
23 three descending 4
37 three descending 6
21 two ascending 28
42 two ascending 30
6 two descending 38
9 two descending 13
关于pandas - 分组、拆分和选取数据框中的顶行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64864630/
在下面的代码中,我想不必添加undefined作为filteredDevice的类型注解。我认为一个被过滤的设备不应该是未定义的,因为我过滤掉了未定义的设备。 但是如果我删除 undefined类型注
我有一个 UIButton,其文本来自服务器。按钮的宽度是固定的。我想要的是,如果按钮的文本超过按钮的宽度,文本应该在按钮内选取框。如果文本适合按钮宽度,则不应有选取框效果。 我点击了一些链接(one
我正在从头开始实现 webgl 选取,并决定走 GLSL 路线,而不是光线相交测试。 所以我将整个场景渲染到一个单独的帧缓冲区中,为每个对象分配一个唯一的颜色,该颜色作为统一变量传递给片段着色器。当场
例如,我有包含多个对象的数组, var arr = ["a", "b", "c", "d"]; 我想要的是从该数组中选取 2 个随机对象,例如“a”和“c”,并将这 2 个对象推送到另一个数组中,例如
我是一名优秀的程序员,十分优秀!