python - 如何使用二维数组索引 df 并查找另一个数组中的值?

标签 python pandas

我的输入是 df 和两个数组:

df = pd.DataFrame({'id': ['id1', 'id2', 'id3', 'id4', 'id5']})

indexes = np.array(
    [[1, 2],
    [4, 0],
    [0, 1],
    [2, 0],
    [1, 0]])

values = np.array(
    [[0.012, 0.019],
    [0.009, 0.012],
    [0.019, 0.028],
    [0.042, 0.061],
    [0.009, 0.021]])

我试图根据indexes数组获取相应的id,同时提取值。

下面的代码给出了预期的输出,但它不仅给了我警告,而且在我的数据集上也非常慢。

wanted = df.copy()
for i, j in enumerate(indexes):
    wanted.at[i, 'list_ids'] = ', '.join(df.iloc[j].squeeze().tolist())
    
for i, j in enumerate(values):
    wanted.at[i, 'list_values'] = np.array(j, dtype='object')
    
print(wanted)

   id   list_ids     list_values
0  id1  id2, id3  [0.012, 0.019]
1  id2  id5, id1  [0.009, 0.012]
2  id3  id1, id2  [0.019, 0.028]
3  id4  id3, id1  [0.042, 0.061]
4  id5  id2, id1  [0.009, 0.021]

你们知道如何改进它或者有其他建议吗?

最佳答案

只需使用 索引:

df['list_ids'] = df['id'].to_numpy()[indexes].tolist()
df['list_values'] = values.tolist()

输出:

    id    list_ids     list_values
0  id1  [id2, id3]  [0.012, 0.019]
1  id2  [id5, id1]  [0.009, 0.012]
2  id3  [id1, id2]  [0.019, 0.028]
3  id4  [id3, id1]  [0.042, 0.061]
4  id5  [id2, id1]  [0.009, 0.021]

如果你想要字符串,不幸的是你必须循环:

df['list_ids'] = list(map(', '.join, df['id'].to_numpy()[indexes]))
df['list_values'] = values.tolist()

输出:

    id  list_ids     list_values
0  id1  id2, id3  [0.012, 0.019]
1  id2  id5, id1  [0.009, 0.012]
2  id3  id1, id2  [0.019, 0.028]
3  id4  id3, id1  [0.042, 0.061]
4  id5  id2, id1  [0.009, 0.021]

关于python - 如何使用二维数组索引 df 并查找另一个数组中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77357094/

相关文章:

python - pandas - pd.replace 和 TypeError

python - 如何 : Redis in production server

python - 将多列与多索引列中的同一单列相乘 Pandas

python - 如何在列名子组中独立地重新排列 pandas 数据框的每一行?

python - 如何将包含字符串值的 pandas 数据框的列转换为 int/float?

python - 填充 pandas DataFrame

python - 更改一系列数据框中元素的值python

python - 在绘图中标记特殊的日子

python - Elasticsearch-Python 2.7-为分析器配置索引

python - 机器学习的周期性数据(如度角 -> 179 与 -179 相差 2)