Pandas Lookup 将被弃用——优雅高效的替代方案

nrc*_*001 7 python lookup dataframe pandas

Pandas 查找功能将在未来版本中弃用。正如警告所建议的,建议使用 .melt 和 .loc 作为替代。

df = pd.DataFrame({'B': ['X', 'X' , 'Y', 'X', 'Y', 'Y', 'X', 'X', 'Y', 'Y', 'X', 'Y'],
                   'group': ["IT", "IT", "IT", "MV", "MV", "MV", "IT", "MV", "MV", "IT", "IT", "MV"]})

a = pd.concat([df, df['B'].str.get_dummies()], axis=1).groupby('group').rolling(3, 
                   min_periods=1).sum().sort_index(level=1).reset_index(drop=True)               

df['count'] = a.lookup(df.index, df['B'])

# Output Warning:
# <ipython-input-16-e5b517460c82>:7: FutureWarning: The 'lookup' method is deprecated and will be
# removed in a future version. You can use DataFrame.melt and DataFrame.loc as a substitute.
Run Code Online (Sandbox Code Playgroud)

但是,替代方案似乎不太优雅且速度较慢:

b = pd.melt(a, value_vars=a.columns, var_name='B', ignore_index=False)
b.index.name='index'
df.index.name='index'
df = df.merge(b, on=['index','B'])
df
Run Code Online (Sandbox Code Playgroud)

有没有更优雅、更有效的方法来解决这个问题?

先谢谢了。

l m*_*zhi 3

看起来,您可以只使用索引来分配新值。

dfn = df.set_index('B', append=True)
dfn['count'] = a.stack()
Run Code Online (Sandbox Code Playgroud)