熊猫,对于每一行获取两列之间最大列的值

Posted

技术标签:

【中文标题】熊猫,对于每一行获取两列之间最大列的值【英文标题】:Pandas, for each row getting value of largest column between two columns 【发布时间】:2018-04-14 04:19:02 【问题描述】:

我想在 pandas 数据框上表达以下内容,但除了缓慢手动迭代所有单元格之外,我不知道该怎么做。

对于上下文:我有一个包含两类列的数据框,我们将它们称为 read_columns 和 non_read_columns。给定一个列名,我有一个函数可以返回 true 或 false 来告诉您该列属于哪个类别。

Given a specific read column A:
    For each row:
        1. Inspect the read column A to get the value X
        2. Find the read column with the smallest value Y that is greater than X.
            If no read column has a value greater than X, then substitute the largest value
            found in all of the *non*-read columns, call it Z, and skip to step 4.
        3. Find the non-read column with the greatest value between X and Y and call its value Z.
        4. Compute Z - X

最后我希望有一系列与原始数据框具有相同索引的 Z - X 值。 请注意,列值的排序顺序在各行之间不一致

最好的方法是什么?

【问题讨论】:

为什么投反对票?似乎是一个严格陈述的正常编程问题......? 你能创建样本输入和预期输出吗? How to ask a good Pandas question? 我认为我所说的完全明确地描述了这个问题。如果您是其他可能感兴趣的人,但我不明白为什么它值得反对,那么缺乏示例数据可能是不花时间回答问题的一个很好的理由。现在这个问题将被埋没,即使我添加数据也不会得到实际回答的可见性。 “什么是最好的方法”非常广泛,任何人都可以回答零方向。提供示例和尝试可以为我们提供基准测试的起点。 @AndrewL 另一种方法是手动迭代所有单元格 【参考方案1】:

如果不查看示例 DF,很难给出答案,但您可以执行以下操作:

    将您的读取列与 Y 值分离到一个新的 DF 中。 转置这个新的 DF 以获得列中的 Y 值,而不是行中的值。 对 Y 值系列使用内置矢量化函数,而不是手动迭代行和列。您可以先过滤大于 X 的值,然后在过滤后的 Series 上应用 min()。

【讨论】:

以上是关于熊猫,对于每一行获取两列之间最大列的值的主要内容,如果未能解决你的问题,请参考以下文章

迭代每一行并将两列的值传递给查询并将每个结果附加到表中

根据两列的值选择熊猫数据框行

如何比较两列之间的值是不是具有相同的数字〜熊猫

如何检索表的值以获取sql中两列的最大值

Excel - 删除两列之间的所有一对一行

用熊猫查找两列或多列的最大值