首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何根据列值的某些首选项从DataFrame中选择行?

如何根据列值的某些首选项从DataFrame中选择行?
EN

Stack Overflow用户
提问于 2022-06-19 18:31:58
回答 2查看 40关注 0票数 0

我试图通过从现有Df中选择行来创建一个新的DataFrame。

df:

代码语言:javascript
运行
复制
ID    val1    val2     uniq
A      10       0       1-2
A      10       0       3-2
B      10       0       8-0
B      9        1       7-6
B      8        2       9-3
c      9        1       10-3
c      9        1       3-0

根据val1 &val2上的首选项,每个ID只需要2行:

代码语言:javascript
运行
复制
1) val1 == 10 & val2 == 0 (first preference)
2) val1 == 9 & val2 == 1  (second preference)
3) val1 == 8 & val2 == 2 (third preference)

所需产出:

代码语言:javascript
运行
复制
 ID    val1    val2     uniq
 A      10       0       1-2
 A      10       0       3-2
 B      10       0       8-0
 B      9        1       7-6
 c      9        1       10-3
 c      9        1       3-0

在熊猫身上有什么有效的方法吗?耽误您时间,实在对不起!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-06-19 18:56:40

代码语言:javascript
运行
复制
df.sort_values(['val1', 'val2'], ascending=[False, True]).groupby('ID').head(2)
 
  ID  val1  val2  uniq
0  A    10     0   1-2
1  A    10     0   3-2
2  B    10     0   8-0
3  B     9     1   7-6
5  c     9     1  10-3
6  c     9     1   3-0

编辑:

如果可能有其他类型的组合,但仅考虑到上述三种组合,则应这样做:

代码语言:javascript
运行
复制
a = (df[['val1', 'val2']].astype(str)
     .apply(' '.join, axis = 1).astype('category'))    
order = ['10 0', '9 1', '8 2']
levels = np.r_[order, a.cat.remove_categories(order).cat.categories]
df['a'] = a.cat.reorder_categories(levels).cat.as_ordered()
df.sort_values('a').groupby('ID').head(2).drop(columns='a')

  ID  val1  val2  uniq
0  A    10     0   1-2
1  A    10     0   3-2
2  B    10     0   8-0
3  B     9     1   7-6
5  c     9     1  10-3
6  c     9     1   3-0
票数 1
EN

Stack Overflow用户

发布于 2022-06-19 19:04:47

根据你的喜好,我做了这个

代码语言:javascript
运行
复制
df  = {'ID':['A', 'A', 'B', 'B', 'B', 'C', 'C'],
              'val1': [10,10,10,9,8,9,9],
              'val2': [0,0,0,1,2,1,1]}
df = pd.DataFrame(df)
df1 = df[(df['val1'] == 10) & (df['val2'] == 0)][:2]
df2 = df[(df['val1'] == 9) & (df['val2'] == 1)][:2]
df3 = df[(df['val1'] == 8) & (df['val2'] == 2)][:2]

df4 = df1.append(df2)
df = df4.append(df3)
df.sort_values(['ID'])

输出

无偏好

代码语言:javascript
运行
复制
df.groupby(['ID']).head(2)

输出

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72679393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档