【问题标题】:Finding the minimum distance for each row using pandas使用熊猫查找每行的最小距离
【发布时间】:2018-03-24 16:05:01
【问题描述】:

我正在尝试将不同细菌的 DNA 螺旋与其祖先进行匹配,我有大约 100 万次观察结果。我想为每个细菌确定最近的祖先,即我想将它们与相同或较老的一代(相等或更小的代数)进行比较,所以我的数据框看起来像这样(为简单起见,我们假设 DNA 向量由一个数字组成):

bacteria_id  generation DNA_vector 
213           230        23
254           230        18
256           229        39
289           229        16
310           228        24
324           228        45 

我尝试创建一个矩阵并从该矩阵中为每个细菌选择最小值,但由于它将包含许多行和列,我在创建矩阵之前得到memory error。 让我们假设它不是细菌而是汽车,我将每辆汽车与它自己的一代(例如 2010 年推出的汽车)和较旧的汽车进行比较。还让我们将 DNA_vector 更改为特征数。如果功能数量之间的差异较小,我会假设它与其他汽车更相似。 所以我想创建两个额外的列。第一个将说明最小差异(例如,第一个将是 1,最相似的汽车将是 310 型)

预期输出是:

bacteria_id  generation DNA_vector most_similar_bacteria  distance
213           230        23             310               1 (i.e. 24 -23)
254           230        18             289               2
256           229        39             324               6                
289           229        16             228               8  
310           228        24             324               19
324           228        45              NA               NA

你有什么建议吗?

【问题讨论】:

  • 能否请您删除所有对遗传学的提及并在一个广泛的主题中提出问题?当您不知道要使用什么比较时,很难理解这个问题
  • 哦好的,我会简化的
  • 现在清楚了吗?
  • 执行此操作的直接方法是循环您的 DF 两次。对于每一行,查看所有要比较的行。然后为每个外循环写入一个新的 DF。使用类似 SQL 的语法和一些窗口函数,这会更简单。如果您遇到问题,请写一个玩具示例,有人会解决它。
  • 你能添加预期的输出吗,你想要完成什么真的很困惑。

标签: python pandas matrix


【解决方案1】:

如果您因为数据集大而遇到内存错误,您可以尝试使用 dask。它是一个与 pandas 极为相似的“并行”计算库,允许您使用硬盘驱动器而不是 RAM 来处理更大的数据集。

https://dask.pydata.org/en/latest/

可能与您正在寻找的东西不完全一样,但我很幸运地将它用于您描述的大型数据集。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-04
    • 2012-06-11
    • 1970-01-01
    • 2013-01-28
    • 1970-01-01
    • 2021-01-13
    • 1970-01-01
    相关资源
    最近更新 更多