我的输入是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]

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

推荐答案

Simply use indexing:

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相关问答推荐

如何将我的位置与光强度数据匹配到折射图案曲线中?

创建带有二维码的Flask应用程序,可重定向到特定端点

当值是一个integer时,在Python中使用JMESPath来验证字典中的值(例如:1)

从包含数字和单词的文件中读取和获取数据集

对某些列的总数进行民意调查,但不单独列出每列

海运图:调整行和列标签

从numpy数组和参数创建收件箱

如何过滤包含2个指定子字符串的收件箱列名?

如何使用表达式将字符串解压缩到Polars DataFrame中的多个列中?

基于索引值的Pandas DataFrame条件填充

如何从数据库上传数据到html?

迭代嵌套字典的值

isinstance()在使用dill.dump和dill.load后,对列表中包含的对象失败

try 检索blob名称列表时出现错误填充错误""

dask无groupby(ddf. agg([min,max])?''''

当条件满足时停止ODE集成?

如何在Python中使用Iscolc迭代器实现观察者模式?

使用Python异步地持久跟踪用户输入

如何从比较函数生成ngroup?

Python如何导入类的实例