python - 以特定顺序从熊猫数据框中获取值
问题描述
按 mylist 的顺序从下面的数据框中创建标签列表的最有效方法是什么?
import numpy as np
import pandas as pd
mylist = ['a1.jpeg','a2.jpeg','b1.jpeg','b2.jpeg','c1.jpeg','c2.jpeg']
dat = np.array([(1, 2, 1, 1, 2, 2), ('a2jpeg', 'a1jpeg', 'c2jpeg', 'b2jpeg', 'b1jpeg' , 'c1jpeg')])
df = pd.DataFrame(np.transpose(dat), columns=['labels', 'filenames'])
df
>>labels filenames
0 1 a2.jpeg
1 2 a1.jpeg
2 1 c2.jpeg
3 1 b2.jpeg
4 2 b1.jpeg
5 2 c1.jpeg
解决方案
首先使用Series.replace
,然后通过DataFrame.set_index
with更改顺序Series.reindex
:
L = (df.assign(filenames = df['filenames'].replace('jpeg','.jpeg', regex=True))
.set_index('filenames')['labels']
.reindex(mylist)
.tolist())
print (L)
['2', '1', '2', '1', '2', '1']
或者:
df['filenames'] = pd.Categorical(df['filenames'].replace('jpeg','.jpeg', regex=True),
ordered=True,
categories=mylist)
L = df.sort_values(by='filenames')['labels'].tolist()
print (L)
['2', '1', '2', '1', '2', '1']
如果可能,通过排序简化解决方案DataFrame.sort_values
:
L = df.sort_values(by='filenames')['labels'].tolist()
print (L)
['2', '1', '2', '1', '2', '1']
推荐阅读
- java - 查找斐波那契单词序列的第 n 个单词(Java)
- python - ValueError:未知的度量函数:精度
- javascript - 为什么 (number).toString(32) 的结果与其他 Base32 编码器实现不同?
- python - 使用 Twisted 实现 SIP 重定向
- java - 如何将项目添加到列表以显示 kotlin 中的所有项目?
- spring-boot - 从多个索引中获取数据,这些索引在 spring-data elasticsearch 中具有一个通用字段
- javascript - 搜索栏未显示或正在处理分页项目以显示学生
- java - java.lang.RuntimeException:无法使用 null 启动服务 com.davidbriglio.foreground.ForegroundService@1d25633:java.lang.NullPointerException
- visual-studio - 如何更改 Visual Studio Conan 的包含路径?
- c# - 单击保存按钮时,不存在从对象类型 System.Windows.Forms.DateTimePicker 到已知托管提供程序本机类型错误的映射