- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在寻找一种优雅的方法来解决以下问题。
使用具有 15 列和 1250 行化合物信息(1250 种化合物)的 DataFrame。一个名为“molecular_mass”的特定列包含数字,我想将其用作句柄来创建每个包含 100 种化合物的组,其中组中每个化合物的“molecular_mass”数字不能在任何其他化合物的 +/- 1 范围内该组中的编号。
我正在执行以下操作以随机分组 100,但这并不能帮助我解决将“molecular_mass”数字与组中的任何其他数字分开 +/- 1 的问题。
import pandas as pd
df=pd.read_csv('data.csv')
df=df.sample(frac=1).reset_index(drop=TRUE)
SIZE=100
df['group']=df.index // SIZE
groups=[
df[df['group'] == num]
for num in range (df['group'].max()+1)]
从 data.csv 添加一些示例行
data.csv 的格式为(显示了 6 个最重要的列)。
最佳答案
(SO 中的第一篇文章。帮助我找出我可以做得更好的地方。这不是一个 NumPy 的答案,但我希望它能有所帮助)
对于我的解决方案,我将创建一个空字典来存储化合物组并循环遍历表中给出的数据,同时检查(或迭代)每个组是否符合您描述的两个条件。
如果当前迭代组没有出现任何失败条件,它将把化合物追加到组中,否则它将转到下一个组或在字典上创建一个新组。
因为我不确定我是否能够在 numpy 中执行此操作,所以我创建了一个 Data 类来充当可返回化合物名称和化合物质量的可迭代对象。我希望您可以轻松地将这里的想法转化为您的代码。
使用下面的代码我得到了以下结果{0: ['A', 'C', 'D', 'G'], 1: ['B', 'E', 'F']}
class Data:
compound = ["A", "B", "C", "D", "E", "F", "G"]
mass = [74.12, 74.12, 76.12, 120.3, 121.3, 119.3, 150.3]
def __init__(self):
assert len(self.compound) == len(self.mass)
self._current_index = 0
def __len__(self):
return len(self.compound)
def __getitem__(self, item):
member = self.compound[item], self.mass[item]
return member
MAX_COMPOUNDS_PER_GROUP = 100
MAX_WEIGHT_DELTA_IN_GROUP = 1
data = Data()
groups = dict()
for dd in data:
print(dd)
if len(groups) == 0:
print(f"group 0 created. added {dd[0]} to it")
groups[0] = [dd[0]]
continue
for group, comps_in_group in groups.items():
if len(comps_in_group) >= MAX_COMPOUNDS_PER_GROUP:
continue
for comp in comps_in_group:
comp_idx = data.compound.index(comp)
comp_mas = data.mass[comp_idx]
if abs(dd[1] - comp_mas) <= MAX_WEIGHT_DELTA_IN_GROUP:
break
else:
print(f"no mass conflict. appending {dd[0]} to group {group}")
comps_in_group.append(dd[0])
break
else:
print(
f"no group available. creating group {len(groups)} and adding"
f"{dd[0]}"
)
groups[len(groups)] = [dd[0]]
print(groups)
关于Python - 按条件分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69564135/
您好,我正在处理 BIRT 报告。我有一个查询,我必须对父级的重复数据进行分组,但子级也不能分组! 在我的查询中: item 是父项,item_ledger_entry 是子项。我有来自 item.N
我正在使用 GA API。 这是针对 MCF 目标报告(底部)的标准目标完成指标表(顶部) 看一下这个: 总数加起来 (12,238),但看看按 channel 分组的分割有多么不同!我以为这些会很接
我正在开发一个流量计数器,我想获得 IP 和重复计数,但是如何? 就像是 :select ip, count(ip) from Redirect 返回 : null total ip count 重定
我尝试编写一个正则表达式来匹配条件表达式,例如: a!=2 1+2=2+a 我尝试提取运算符。我当前的正则表达式是“.+([!=<>]+).+” 但问题是匹配器总是尝试匹配组中可能的最短字符串
在 MS Transact SQL 中,假设我有一个这样的表(订单): Order Date Order Total Customer # 09/30/2008 8
我想按 m.ID 分组,并对每个 m.id 求和 (pm.amount_construction* prod.anzahl) 实际上我有以下结果: Meterial_id | amount_const
我想根据多列中的值对值进行分组。这是一个例子: 我想得到输出: {{-30,-50,20},{-20,30,60},{-30,NULL or other value, 20}} 我设法到达: SELE
我正在尝试找出运行此查询的最佳方式。我基本上需要返回在我们的系统中只下了一个订单的客户的“登录”字段列表(登录字段基本上是客户 ID/ key )。 我们系统的一些背景...... 客户在同一日期下的
给定以下mysql结果集: id code name importance '1234', 'ID-CS-B', 'Chocolate Sauce'
大家好,我的数据框中有以下列: LC_REF 1 DT 16 2C 2 DT 16 2C 3 DT 16 2C 1 DT 16 3C 6 DT 16 3C 3
我有这样的 mongoDB 集合 { "_id" : "EkKTRrpH4FY9AuRLj", "stage" : 10, }, { "_id" : "EkKTRrpH4FY9
假设我有一组数据对,其中 index 0 是值,index 1 是类型: input = [ ('11013331', 'KAT'), ('9085267',
java中用stream进行去重,排序,分组 一、distinct 1. 八大基本数据类型 List collect = ListUtil.of(1, 2, 3, 1, 2).stream().fil
基本上,我从 TABLE_A 中的这个开始 France - 100 France - 200 France - 300 Mexico - 50 Mexico - 50 Mexico - 56 Pol
我希望这个正则表达式 ([A-Z]+)$ 将选择此示例中的最后一次出现: AB.012.00.022ABC-1 AB.013.00.022AB-1 AB.014.00.022ABAB-1 但我没有匹配
我创建了一个数据透视表,但数据没有组合在一起。 任何人都可以帮助我获得所需的格式吗? 我为获取数据透视表而编写的查询: DECLARE @cols AS NVARCHAR(MAX), -- f
我想按时间段(月,周,日,小时,...)选择计数和分组。例如,我想选择行数并将它们按 24 小时分组。 我的表创建如下。日期是时间戳。 CREATE TABLE MSG ( MSG_ID dec
在 SQL Server 2005 中,我有一个包含如下数据的表: WTN------------Date 555-111-1212 2009-01-01 555-111-1212 2009-
题 假设我有 k 个标量列,如果它们沿着每列彼此在一定距离内,我想对它们进行分组。 假设简单 k 是 2 并且它们是我唯一的列。 pd.DataFrame(list(zip(sorted(choice
问题 在以下数据框中 df : import random import pandas as pd random.seed(999) sz = 50 qty = {'one': 1, 'two': 2
我是一名优秀的程序员,十分优秀!