【问题标题】:Compare float values in one column with all other columns in a pandas DataFrame将一列中的浮点值与 pandas DataFrame 中的所有其他列进行比较
【发布时间】:2018-12-24 02:25:08
【问题描述】:

我有一个数据框,其中包含多个带有浮点值的列。

df = pd.DataFrame({
        "v0": [0.493864,0.378362,0.342887,0.308959,0.746347], 
        "v1":[0.018915,0.018535,0.019587,0.035702,0.008325],
        "v2":[0.252000,0.066746,0.092421,0.036694,0.036506],
        "v3":[0.091409,0.103887,0.098669,0.112207,0.043911],
        "v4":[0.058429,0.312115,0.342887,0.305678,0.103065],
        "v5":[0.493864,0.378362,0.338524,0.304545,0.746347]})

我需要通过将df['v0'] 中每一行的值与后续列 v1-v5 中的行值进行比较,在 df 中创建另一列结果。

我需要的如下: v0 v1 v2 v3 v4 v5 Result 0 0.493864 0.018915 0.252000 0.091409 0.058429 0.493864 1 1 0.378362 0.018535 0.066746 0.103887 0.312115 0.378362 1 2 0.342887 0.019587 0.092421 0.098669 0.342887 0.338524 1 3 0.308959 0.035702 0.036694 0.112207 0.305678 0.304545 0 4 0.746347 0.008325 0.036506 0.043911 0.103065 0.746347 1

我尝试了很多方法,包括 This linkThis link

但我要求的任务似乎不可行。 自最近几天以来,我一直在为此苦苦挣扎。我拥有的原始数据集有超过 60000 行。请建议最好最快的方法

【问题讨论】:

  • 我刚刚删除了我的答案,因为它与this 太相似了。无论如何,您应该考虑更改您的示例,否则您的第一个 link 的任何解决方案都是可行的。
  • @user32185 建议对浮点列进行相等比较不是一个好主意。
  • @coldspeed 我同意。这就是为什么我建议我们 OP 举一个突出显示的例子。

标签: python pandas dataframe floating-point


【解决方案1】:

处理浮点比较的更好解决方案是将np.isclose 与广播一起使用:

df['Result'] = np.isclose(v[:,1:], v[:,[0]]).any(1).astype(int)
df
         v0        v1        v2        v3        v4        v5  Result
0  0.493864  0.018915  0.252000  0.091409  0.058429  0.493864       1
1  0.378362  0.018535  0.066746  0.103887  0.312115  0.378362       1
2  0.342887  0.019587  0.092421  0.098669  0.342887  0.338524       1
3  0.308959  0.035702  0.036694  0.112207  0.305678  0.304545       0
4  0.746347  0.008325  0.036506  0.043911  0.103065  0.746347       1

在处理浮点数时使用基于相等的比较,因为浮点数可能不准确。见Is floating point math broken?

【讨论】:

  • 嗨@coldspeed 它工作。我试图做的这项活动在我的整个项目中只是一个小问题,但我不知何故被它迷住了。从来没有做过浮动比较,我真的很难掌握。此外,没有任何解决方案有效。感谢您的还原,一点点修改,它的工作原理
【解决方案2】:

对于每个人,问题都已解决。感谢所有这些 wqho 花时间回复我。作为一名业余程序员,看到我的问题得到解答真的很令人振奋。 感谢@coldspeed

,最终解决方案如下所示

JUPYTER NOTEBOOK SCREENSHOT

【讨论】:

    猜你喜欢
    • 2022-08-05
    • 1970-01-01
    • 1970-01-01
    • 2021-02-22
    • 1970-01-01
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    • 2017-01-31
    相关资源
    最近更新 更多