假设我有一个名为fruit
的熊猫系列,看起来像这样:
mango, kiwi, pear, kiwi, pear, mango, mango.
我知道这些水果之间的价格关系如下:
mango = 1.2 * pear
和kiwi = 0.8 * pear
如何将fruit
列转换为数字,使得:
1.5, 1, 1.2, 1, 1.2, 1.5, 1.5
?
不确定是否可以使用Python标准库或Pandas来执行此操作,或者是否需要使用SymPy。 [首选为stdlib或Pandas]。
提前谢谢!
答案 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