我已经提供了数据框
Id Direction Load Unit
1 CN05059815 LoadFWD 0,0 NaN
2 CN05059815 LoadBWD 0,0 NaN
4 ....
....
和给定的清单。
list =['CN05059830','CN05059946','CN05060010','CN05060064' ...]
我想按列表的给定元素对数据进行排序或分组。
例如,
新数据将与列表完全相同。第一列以CN05059815
开头,不属于列表,第二列CN05059830
CN05059946 ...
都属于列表。剩下的其他数据
答案 0 :(得分:0)
一种方法是使用Categorical Data。这是一个最小的例子:
# sample dataframe
df = pd.DataFrame({'col': ['A', 'B', 'C', 'D', 'E', 'F']})
# required ordering
lst = ['D', 'E', 'A', 'B']
# convert to categorical
df['col'] = df['col'].astype('category')
# set order, adding values not in lst to the front
order = list(set(df['col']) - set(lst)) + lst
# attach ordering information to categorical series
df['col'] = df['col'].cat.reorder_categories(order)
# apply ordering
df = df.sort_values('col')
print(df)
col
2 C
5 F
3 D
4 E
0 A
1 B
答案 1 :(得分:0)
考虑以下方法和示例:
df = pd.DataFrame({
'col': ['a', 'b', 'c', 'd', 'e']
})
list_ = ['d', 'b', 'a']
print(df)
输出:
col
0 a
1 b
2 c
3 d
4 e
然后为了用列表及其排序对df进行排序:
df.reindex(df.assign(dummy=df['col'])['dummy'].apply(lambda x: list_.index(x) if x in list_ else -1).sort_values().index)
输出:
col
2 c
4 e
3 d
1 b
0 a