我应该通过比较此列('% Renewable')的值与同一列的中位数来创建一个新的 Pandas 列。结果应该构成一个新列。
当然,我可以使用 for 循环来做到这一点。虽然我才刚刚开始学习,但我想更多地使用 map、lambda 等方法。
因此我试过这个:
def above(x,y):
if x>=y:
return 1
else:
return 0
def answer_ten():
Top15 = answer_one() #loads the dataframe and formats it
Median=Top15['% Renewable'].median()
Top15['HighRenew']=map(above, Top15['% Renewable'], Top15['% Renewable'].median()
# one try: list(map(above, (Top15['% Renewable'], Top15['% Renewable'].median())))
# one more try: [*map(above, (Top15['% Renewable'], Top15['% Renewable'].median()))]
return Top15['HighRenew']
但是我得到一个错误而不是值:'float'对象不可迭代
我尝试在评论行中列出的替代方案,我从这里的另一篇文章中获得:获取地图()以返回 Python 3.x 中的列表
到现在为止,我想出了一种不同的单行解决方案,如下所示:
Top15['HighRenew']=(Top15['% Renewable']>=Top15['% Renewable'].median()).astype('int')
但是我想知道如何使用 Lambda 或 map() 或 filter(?) 以不同的方式(当然更长)来实现这一点。
谁能指出我的替代解决方案?
谢谢。
你可能只是想要above(Top15['% Renewable'], Top15['% Renewable'].median())
. map
接受一系列对象并将函数应用于每个对象,但您只想应用一次。你得到的错误是因为你传入的两个值不能循环。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句