使用给定的字符串在python中对数据帧进行排序或分组

时间:2018-05-25 22:30:13

标签: python pandas sorting

我已经提供了数据框

    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 ...都属于列表。剩下的其他数据

2 个答案:

答案 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