我有一个 numpy 数组:
np.random.seed(123456)
a=np.random.randint(0,9, (5,5))
array([[1, 2, 1, 8, 0],
[7, 4, 8, 4, 2],
[6, 6, 7, 2, 6],
[2, 4, 4, 7, 4],
[4, 4, 5, 1, 7]])
还有一个 pandas 数据框,其中包含我想要数据的索引:
df = pd.DataFrame([[0,1],[1,2],[2,3]],columns=['i','j'])
过去我用过:
df['vals'] = df[['i', 'j']].apply(lambda x: a[x[0], x[1]], axis=1)
i j vals
0 0 1 2
1 1 2 8
2 2 3 2
这给了我我想要的值(2,8,2),但已经开始给我以下警告:
未来警告:系列。获取项目 不推荐将键视为位置。在未来的版本中,整数 键将始终被视为标签(与 DataFrame 一致 行为)。要按位置访问值,请使用
ser.iloc[pos]
df['vals'] = df[['i', 'j']].apply(lambda x: a[x[0], x1], axis=1)
如here所述,尝试使用
df.loc[:, 'vals'] = df.loc[:,['i', 'j']].apply(lambda x: d[x[0], x[1]], axis=1)
,但我仍然收到警告。另外,按照建议,我尝试使用 df['vals'] = df[['i', 'j']].apply(lambda x: a[*x], axis=1)
但出现语法错误
任何人都可以建议更好的方法吗?我不喜欢压制警告,因为我通常会从中学到一些东西。