Python 熊猫,按特定顺序获取元素

Python 熊猫,按特定顺序获取元素,python,pandas,Python,Pandas,我有一个熊猫数据框 col1 col2 Apple 70 Lemon 80 Banana 90 我有一个按特定顺序排列的col1元素列表: my_list = ['Banana', 'Apple', 'Lemon'] 我需要按照my_list result = [90, 70, 80] 我怎样才能做到这一点? 谢谢 PS:我看到了我的问题的几种解决方案,所以我可能把它简化了,因为有些解决方案对我真正的问题没有效率(我的错误是过于简化) 问题有点复杂,我的data

我有一个熊猫数据框

col1    col2
Apple     70
Lemon     80
Banana    90
我有一个按特定顺序排列的
col1
元素列表:

my_list = ['Banana', 'Apple', 'Lemon']
我需要按照
my_list

result = [90, 70, 80]
我怎样才能做到这一点? 谢谢

PS:我看到了我的问题的几种解决方案,所以我可能把它简化了,因为有些解决方案对我真正的问题没有效率(我的错误是过于简化)

问题有点复杂,我的dataframe有更多的列和很多行

col1    col2   col3
Apple     70   red
Lemon     80   red
Banana    90   red
Lemon     2    blue
Apple     3    blue
Banana    4    blue
Lemon     67   green
Banana    68   green
Apple     69   green
基本上,col1的值对col3的每个值都重复(但顺序可能不同!)

我需要的是为col3的每个值从col2得到一个值向量,但总是以相同的顺序

因此,我通过以下操作获得我的_列表:

my_list = np.unique(df['col2'])
然后我对col3的每个元素进行迭代,得到我发布的简化示例

这不会改变答案,但考虑到整个情况,我可能会选择其中一个

如果
col1
的值唯一,则使用

a = df.set_index('col1').reindex(my_list)['col2'].values.tolist()
print (a)
[90, 70, 80]
或:


大熊猫0.15

pandas
具有“内置”排序方法,请尝试以下操作:

df['column'].sort_values(ascending=False)

您可以创建一个系列并使用
map
。这应该比使用
pd.category
或列表理解进行排序更有效

s = df.set_index('col1')['col2']
res = list(map(s.get, my_list))

print(res)

[90, 70, 80]

我不需要按字母顺序排序。这并不能解决我的问题。@SembeiNorimaki,为什么你认为它们会按字母顺序排序?我不知道这段代码如何使用
my_list
对值进行排序。@SembeiNorimaki,明白了。看来是我越狱了
df = ...
my_list = ['Banana', 'Apple', 'Lemon']

df['col1'] = pd.Categorical(df['col1'], my_list )
df.sort("col1")

result = df['col2']
df['column'].sort_values(ascending=False)
s = df.set_index('col1')['col2']
res = list(map(s.get, my_list))

print(res)

[90, 70, 80]