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

3

我有一个数据框,其中一列由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()

当我运行以上代码时,我会得到一个错误(这是预料之中的,因为Sympy符号本身并不可排序,但实际包含的字符串是可排序的)。
TypeError: cannot determine truth value of Relational

如果您可以对Sympy符号应用.name方法,则可以对其进行排序。 我已经在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)]

我想知道是否可以使用数据框架进行排序,因为我不想转换成其他格式再进行排序。

1个回答

2

我不确定这样做是否更有效,但也许您可以为数据框创建一个新列,例如'Symbol_names',其中只包含名称,并按该列排序。您始终可以在之后删除该列。

df['Symbol_names'] = df['Symbol'].apply(lambda x: x.name) 

df = df.sort_values('Symbol_names')\
       .drop("Symbol_names", axis=1)\
       .reset_index(drop=True) # optional


好的,我最终做成了,谢谢。如果有单行版本会更好,但这个也可以 :) - Terraffin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接