我有一个pandas数据帧
col1 col2
Apple 70
Lemon 80
Banana 90
我有一个按特定顺序列出col1
元素的列表:
my_list = ['Banana', 'Apple', 'Lemon']
我需要按照col2
my_list
的值
result = [90, 70, 80]
我怎么能实现这一目标? 感谢
PS:我看到了我的问题的几个解决方案,所以也许我过度简化了它,因为有些解决方案不能有效解决我的实际问题(我过分简化的错误)。问题稍微复杂一点,我的数据框有更多的列和很多行。
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:
my_list = np.unique(df['col2'])
然后我迭代col3的每个元素,获得我发布的简单示例。
这并没有改变答案,但我可能会选择一个或另一个考虑到整个情况。
答案 0 :(得分:2)
Pandas 0.15介绍了Categorical Series
df = ...
my_list = ['Banana', 'Apple', 'Lemon']
df['col1'] = pd.Categorical(df['col1'], my_list )
df.sort("col1")
result = df['col2']
答案 1 :(得分:2)
您可以创建一个系列并使用map
。这应该比使用pd.Categorical
或列表推导进行排序更有效。
s = df.set_index('col1')['col2']
res = list(map(s.get, my_list))
print(res)
[90, 70, 80]
答案 2 :(得分:1)
如果unique
值col1
:
reindex
a = df.set_index('col1').reindex(my_list)['col2'].values.tolist()
print (a)
[90, 70, 80]
from pandas.api.types import CategoricalDtype
cat_type = CategoricalDtype(categories=my_list, ordered=True)
df['col1'] = df['col1'].astype(cat_type)
df = df.sort_values('col2', ascending=False)
print (df['col2'].tolist())
[90, 80, 70]
df['col1'] = pd.Categorical(df['col1'], my_list, ordered=True)
df = df.sort_values('col2', ascending=False)
print (df['col2'].tolist())
[90, 80, 70]
答案 3 :(得分:-2)
let d = document.querySelector('div'),
gcs = window.getComputedStyle(d, null);
window.addEventListener('resize', () => {
let w = gcs.getPropertyValue("width");
d.textContent = "current width: " + w;
});
已经"内置"排序方法,试试这个:
pandas