识别可变序数

时间:2019-06-30 15:37:57

标签: python-3.x pandas sympy

假设我有一个名为fruit的熊猫系列,看起来像这样:

mango, kiwi, pear, kiwi, pear, mango, mango.

我知道这些水果之间的价格关系如下:

mango = 1.2 * pearkiwi = 0.8 * pear

如何将fruit列转换为数字,使得: 1.5, 1, 1.2, 1, 1.2, 1.5, 1.5

不确定是否可以使用Python标准库或Pandas来执行此操作,或者是否需要使用SymPy。 [首选为stdlib或Pandas]。

提前谢谢!

3 个答案:

答案 0 :(得分:0)

documentation之后。何时拥有:

s = pd.Series(['cat', 'dog', np.nan, 'rabbit'])

您只需在意甲上调用map函数即可,

s.map({'cat': 'kitten', 'dog': 'puppy'})

这将返回一个新的熊猫系列。

答案 1 :(得分:0)

如果您有一套自洽的等式,则可以执行以下操作:

>>> eq=S('[mango = 1.2 * pear, kiwi = 0.8 * pear]'.replace('=','-'))
>>> v = solve(eq)
>>> S('Tuple(mango, kiwi, pear)').subs(v)
(1.2*pear, 0.8*pear, pear)

(在这种情况下,也没有提供足够的信息来了解梨的价格。也请注意,这仅在方程式rhs的数量不是项之和时才有效。) / p>

我不与熊猫一起工作,所以我不确定如何建议有关类型转换的建议,例如从SymPy表达式转换回项目以进入您的系列。

答案 2 :(得分:0)

IIUC,您可以这样做:

s=pd.Series(['mango', 'kiwi', 'pear', 'kiwi', 'pear', 'mango', 'mango'],name='fruit')

pear=1
d={'mango':1.2 * pear, 'kiwi': 0.8 * pear,'pear':pear}
s.map(d).div(s.map(d).min()).round(1)

0    1.5
1    1.0
2    1.2
3    1.0
4    1.2
5    1.5
6    1.5