按顺序排序+熊猫中的一个条件



Panda中有什么方法可以实现这种类型的排序吗?

这是我想要的样品df = df.sort_values(['Name'])

Name                           ID
|Retailer|Lidl                  282
|Retailer|Lidl Kaufland         256
|Retailer|Lidl Kaufland|Hamburg 268
|Retailer|Lidl|Hamburg          287

当需要的结果应该是时

Name                           ID
|Retailer|Lidl                  282
|Retailer|Lidl|Hamburg          287
|Retailer|Lidl Kaufland         256
|Retailer|Lidl Kaufland|Hamburg 268

正如您所看到的,即使在sort_value中添加ID也不会有帮助,因为值只有在第一次排序后才递增。

这是某种层次结构,父级位于顶部,然后子级位于底部。

|Retailer|Lidl = parent 
|Retailer|Lidl|Hamburg = child
|Retailer|Lidl Kaufland = parent
|Retailer|Lidl Kaufland|Hamburg = child

IIUC,您可以使用元组进行排序,例如@jezrael:

result = df.iloc[df.Name.str.split('|').map(tuple).argsort()]

作为替代方案:

df['order'] = df.Name.str.split('|').map(tuple)
result = df.sort_values('order').drop('order', axis=1)
print(result)

输出

Name   ID
0                   |Retailer|Lidl  282
3           |Retailer|Lidl|Hamburg  287
1          |Retailer|Lidl Kaufland  256
2  |Retailer|Lidl Kaufland|Hamburg  268

这保证了父母永远是孩子的第一位。

最新更新