Python 对由Sympy符号组成的数据帧列进行排序

Python 对由Sympy符号组成的数据帧列进行排序,python,pandas,dataframe,sorting,sympy,Python,Pandas,Dataframe,Sorting,Sympy,我有一个数据框,其中一列由符号组成,另一列由值组成 import sympy as sym import pandas as pd d1,c,bc = sym.symbols("\delta, c, b_c") values = [(d1,1),(c,2),(bc,3)] df = pd.DataFrame(values, columns = ['Symbol', 'Value']) df['Symbol'].sort_values() 当我运行上面的程序时,我得到了一个错误(这是意料之中的

我有一个数据框,其中一列由符号组成,另一列由值组成

import sympy as sym
import pandas as pd
d1,c,bc = sym.symbols("\delta, c, b_c")

values = [(d1,1),(c,2),(bc,3)]
df = pd.DataFrame(values, columns = ['Symbol', 'Value'])
df['Symbol'].sort_values()
当我运行上面的程序时,我得到了一个错误(这是意料之中的,因为Sympy符号本身不可排序,但包含的实际字符串是可排序的)

TypeError: cannot determine truth value of Relational
如果可以对Sympy符号应用.name方法,则Sympy符号是可排序的。我已使用numpy数组和字典列表完成了此操作:

import numpy as np
values = np.array(values, dtype = [('Symbol','O'),('Value','O')])
values = sorted(values, key = lambda x: x['Symbol'].name)
display(values)
输出:

>>[(\delta, 1), (b_c, 3), (c, 2)]

我想知道是否可以使用数据帧,因为我不想转换为其他格式来应用排序。

我不确定这是否更有效,但也许您可以为仅包含名称的数据帧创建一个新列,例如“Symbol\u names”,并按此进行排序。您可以始终在排序后删除该列

df['Symbol\u names']=df['Symbol'].apply(lambda x:x.name)
df=df.sort_值('Symbol_name'))\
.drop(“符号名称”,轴=1)\
.reset_索引(drop=True)#可选

是的,我最后做了这个,谢谢。如果有单行版本就好了,但这个就可以了:)