问题描述
Pandas 查找功能将在未来版本中弃用。正如警告所建议的,建议使用 .melt 和 .loc 作为替代。
df = pd.DataFrame({'B': ['X','X','Y','Y'],'group': ["IT","IT","MV","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'])
df
先谢谢了。
解决方法
看起来,您可以使用索引来分配新值。
dfn = df.set_index('B',append=True)
dfn['count'] = a.stack()
,
一个想法是使用 DataFrame.stack
和 DataFrame.join
f 来匹配 index
和 B
:
df1 = df.rename_axis('i').join(a.stack().rename('count'),on=['i','B'])
print (df1)
B group count
i
0 X IT 1.0
1 X IT 2.0
2 Y IT 1.0
3 X MV 1.0
4 Y MV 1.0
5 Y MV 2.0
6 X IT 2.0
7 X MV 1.0
8 Y MV 2.0
9 Y IT 2.0
10 X IT 2.0
11 Y MV 2.0