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
这保证了父母永远是孩子的第一位。