未来版本中将弃用Pandas的lookup功能。如警告所建议的,推荐使用 .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.
然而,替代方案似乎不够优雅且速度较慢:
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'])
有没有更优雅和更高效的方法来解决这个问题?