- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近开始使用 pandas,我偶然发现了我无法解决的(可能是微不足道的)问题。虽然在纯 Python 脚本中更容易做到这一点,但我真的希望在 pandas 中做到这一点。这是我的菜鸟问题。
具有以下数据框:
ID Sample1 quality1 Sample2 quality2 Sample3 quality3
ID1 val str1,str2,str3@num val str1,str2,str3@num val str1,str2,str3@num
ID2 val str4,str5,str63@num val str4,str5,st63@num val str4,str5,str63@num
ID3 val str1,str2,str3@num val str1,str1,str3@num val str4,str2,str3@num
ID4 val str1,str2,str3@num val str2,str2,str3@num val str1,str2,str3@num
ID5 val str4,str5,str63@num val str4,str5,st63@num val str4,str5,str63@num
我想编写一个函数来仅保留 n 列中具有最少所需质量分数的行。只有字符串的第一部分真正重要,因此首先仅选择字符串的第一部分:
ID Sample1 quality1 Sample2 quality2 Sample3 quality3
ID1 val str1 val str1 val str1
ID2 val str4 val str4 val str4
ID3 val str1 val str1 val str4
ID4 val str1 val str2 val str1
ID5 val str4 val str3 val str4
假设我只想在两列中保留最低分数为“str4”的行,我可能会计算跨列的百分比:
ID Sample1 quality1 Sample2 quality2 Sample3 quality3
ID2 val str4 val str4 val str4
ID5 val str4 val str3 val str4
这就是我开始玩它的方式,只是为了知道东西在哪里,但我仍然无法将东西放回原处:
for i,rows in enumerate(table_test.values):
min_val = "str4"
scores = rows[2::2]
lists = np.ndarray.tolist(scores)
for list in lists:
first_str = list.split(",")
print(i, first_str[0])
感谢您的想法或/和帮助!
最佳答案
使用boolean indexing
使用 bool 掩码进行过滤:
min_val = "str4"
df = df[df.filter(like='quality').apply(lambda x: x.str.startswith(min_val)).sum(axis=1) >= 2]
print (df)
ID Sample1 quality1 Sample2 quality2 Sample3 \
1 ID2 val str4,str5,str63@num val str4,str5,st63@num val
4 ID5 val str4,str5,str63@num val str4,str5,st63@num val
quality3
1 str4,str5,str63@num
4 str4,str5,str63@num
或者:
min_val = "str4"
df = df[df.filter(like='quality').applymap(lambda x: x.startswith(min_val)).sum(axis=1) >= 2]
print (df)
ID Sample1 quality1 Sample2 quality2 Sample3 \
1 ID2 val str4,str5,str63@num val str4,str5,st63@num val
4 ID5 val str4,str5,str63@num val str4,str5,st63@num val
quality3
1 str4,str5,str63@num
4 str4,str5,str63@num
说明:
第一filter
所有带有 quality
字符串的列:
print (df.filter(like='quality'))
quality1 quality2 quality3
0 str1,str2,str3@num str1,str2,str3@num str1,str2,str3@num
1 str4,str5,str63@num str4,str5,st63@num str4,str5,str63@num
2 str1,str2,str3@num str1,str1,str3@num str4,str2,str3@num
3 str1,str2,str3@num str2,str2,str3@num str1,str2,str3@num
4 str4,str5,str63@num str4,str5,st63@num str4,str5,str63@num
按 startswith
比较所有列对于 bool 数据帧:
print (df.filter(like='quality').apply(lambda x: x.str.startswith(min_val)))
quality1 quality2 quality3
0 False False False
1 True True True
2 False False True
3 False False False
4 True True True
通过 sum
计算 True
的值 - True
的过程类似于 1
:
print (df.filter(like='quality').apply(lambda x: x.str.startswith(min_val)).sum(axis=1))
0 0
1 3
2 1
3 0
4 3
dtype: int64
按阈值比较:
print (df.filter(like='quality').apply(lambda x: x.str.startswith(min_val)).sum(axis=1) >=2)
0 False
1 True
2 False
3 False
4 True
dtype: bool
<小时/>
如果还想先拆分quality
列split
所有 quality
列并分配回:
min_val = "str4"
cols = df.filter(like='quality').columns
df[cols] = df[cols].apply(lambda x: x.str.split(',').str[0])
#another solution
#df[cols] = df[cols].applymap(lambda x: x.split(',')[0])
print (df)
ID Sample1 quality1 Sample2 quality2 Sample3 quality3
0 ID1 val str1 val str1 val str1
1 ID2 val str4 val str4 val str4
2 ID3 val str1 val str1 val str4
3 ID4 val str1 val str2 val str1
4 ID5 val str4 val str4 val str4
然后通过 min_val
比较 bool DataFrame 并以与之前相同的方式进行过滤:
df = df[(df[cols] == min_val).sum(axis=1) >=2]
print (df)
ID Sample1 quality1 Sample2 quality2 Sample3 quality3
1 ID2 val str4 val str4 val str4
4 ID5 val str4 val str4 val str4
关于python - pandas df 对多列中的部分字符串值进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51172597/
场景 网站页面有一个带有分页、过滤、排序功能的表格 View 。 表中的数据是从REST API服务器获取的,数据包含数百万条记录。 数据库 REST API 服务器 Web 服务器 浏览器 问
我有一个表student,其中的列dte_date(日期)具有值(2019-01-01、2019-02-01、2019-03-01)。 .等) 条件: dte_date 列中没有重复值。 但 dte_
我有一些逻辑可以根据不活动的用户创建通知。我正在获取具有以下属性的用户列表。我想做的只是在部门有非 Activity 用户时触发我的创建通知方法。因此,给出下面的列表,基本上会创建 1 个通知,表示部
使用 GPS 开发跟踪应用程序。一切都很好,但有时由于封闭区域或恶劣天气,我得到的分数不准确。当您绘制它们时,它看起来不对,有很多跃点/跳跃。 我应该运行什么算法来过滤掉不良信号对我来说,这看起来像是
我正在尝试按变量类型过滤对象数组。节点是一个具有位置的对象,但以不同的方式定义——作为点、矢量或附件。这是一个代码: class Joint { var position:Position
我想做的是在向量上创建一个过滤器,以便它删除未通过谓词测试的元素;但不太确定我该怎么做。 我根据谓词评估输入向量中的每个元素,例如在我的代码中,is_even 仿函数在 device_vector 向
我是 Gremlin 的新手,我正在使用 Gremlin 3.0.2 和 Stardog 5.0。我编写此查询是为了找出 schema.org 本体中两个实体之间的路径。以下是输出 - gremlin
考虑以下示例数据表, dt 30 的那一行需要去 - 或者如果其中两行 > 30相隔几秒钟,删除所有 3 个。然而 ,当我们有 4 行或更多行时,我们需要删除时间差 > 30 没有另一对 < 30
我正在考虑使用 ZeroMQ,并尝试了一些示例。但是,我无法验证 ZeroMQ 是否支持一些重要的要求。我希望你能帮助我。 我将使用这个简单的场景来问我的问题: 出版商(例如交易所)提供(大量)股票的
我需要从我的查询中过滤掉大量的对象。目前,它正在抓取类中的所有对象,我想将其过滤为查询字符串中的相关对象。我怎样才能做到这一点?当我尝试时,我收到一个属性错误说明 ''QuerySet' object
如何在 Prometheus 查询中添加标签过滤器? kube_pod_info kube_pod_info{created_by_kind="ReplicaSet",created_by_name=
我有包含字符串的列的数据框,并希望过滤掉包含某些字符串以外的任何内容的所有行。考虑下面的简化示例: string % dplyr::filter(stringr::str_detect(string,
我有以下数据框,其中包含多行的角度变化值: 'data.frame': 712801 obs. of 4 variables: $ time_passed: int 1 2 3 4 5 6
我有一个 BehaviorSubject我希望能够filter ,但要保持新订阅者在订阅时始终获得一个值的行为主题式质量,即使最后发出的值被过滤掉。有没有一种简洁的方法可以使用 rxjs 的内置函数来
我有一个 RSS 提要,每天输出大约 100 篇文章。我希望过滤它以仅包含更受欢迎的链接,也许将其过滤到 50 个或更少。回到当天,我相信您可以使用“postrank”来做到这一点,但在谷歌收购后现已
我有这样一个重复的xml树- this is a sample xml file yellowred blue greyredblue 如您所见,每个项目可以具有不同数量的颜色标签
我以为我在 Haskell 学习中一帆风顺,直到... 我有一个 [[Int]] tiles = [[1,0,0] ,[0,1,0] ,[0,1,0]
我在使用 Knockout.js 过滤可观察数组时遇到问题 我的js: 包含数据的数组 var docListData = [ { name: "Article Name 1", info:
我在 mongoDB 中有这个架构: var CostSchema = new Schema({ item: String, value: Number }); var Attachm
给定一个数据框“foo”,我如何才能只选择“foo”中的那些行,例如foo$location =“那里”? foo = data.frame(location = c("here", "there",
我是一名优秀的程序员,十分优秀!