DataFrame.lookup 需要具有最新版本 Pandas 的唯一索引和列

DataFrame.lookup requires unique index and columns with a recent version of Pandas

我正在使用 python3.7,但我遇到了 pandas 最新版本的问题。 这是我的代码。

import pandas as pd
import numpy as np

data = {'col_1':[9087.6000, 9135.8000, np.nan, 9102.1000],
        'col_2':[0.1648, 0.1649, '', 5.3379],
        'col_nan':[np.nan, np.nan, np.nan, np.nan],
        'col_name':['col_nan', 'col_1', 'col_2', 'col_nan']
        }
df = pd.DataFrame(data, index=[101, 102, 102, 104])

col_lookup = 'results'
col_result = 'col_name'
df[col_lookup] = df.lookup(df.index, df[col_result])

代码在 pandas 版本 1.0.3 上运行良好,但是 当我尝试使用 1.1.1 版时,出现以下错误:

"ValueError: DataFrame.lookup requires unique index and columns"

数据框确实包含索引“102”的重复项。

由于各种原因,我必须使用 pandas 的 1.1.1 版本。是否有使用“查找”命令的解决方案来支持此版本 pandas 的索引复制?

在此先感谢您的帮助。

放置一个唯一索引然后恢复旧索引...

import pandas as pd
import numpy as np

data = {'col_1':[9087.6000, 9135.8000, np.nan, 9102.1000],
        'col_2':[0.1648, 0.1649, '', 5.3379],
        'col_nan':[np.nan, np.nan, np.nan, np.nan],
        'col_name':['col_nan', 'col_1', 'col_2', 'col_nan']
        }
df = pd.DataFrame(data, index=[101, 102, 102, 104])

col_lookup = 'results'
col_result = 'col_name'
df.reset_index(inplace=True)
df[col_lookup] = df.lookup(df.index, df[col_result])
df = df.set_index(df["index"]).drop(columns="index")

Non-unique 索引是一个错误:Github link

pandas 1.1.1 中的“查找”方法不允许您将 non-unique 索引作为输入参数传递。 以下代码已添加到“frame.py”中的“查找”方法的开头,对我来说是在(第 3836 行):

C:\Users\Sajad\AppData\Local\Programs\Python\Python38\Lib\site-packages\pandas\core\frame.py

if not (self.index.is_unique and self.columns.is_unique):
# GH#33041
    raise ValueError("DataFrame.lookup requires unique index and columns")

但是,如果此错误处理程序不存在,此方法中的以下过程将以 for 循环结束。用这个 built-in for 循环替换最后一行会得到与以前的 pandas 版本相同的结果。

result = np.empty(len(df.index), dtype="O")
for i, (r, c) in enumerate(zip(df.index, df[col_result])):
    result[i] = df._get_value(r, c)
df[col_lookup] = result