我应该通过将此列('%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'对象不可迭代
我试着在评论专栏中听取替代方案,我从另一篇文章中得到了这些内容:Getting a map() to return a list in Python 3.x
到目前为止,我想出了一个不同的单行解决方案:
Top15['HighRenew']=(Top15['% Renewable']>=Top15['% Renewable'].median()).astype('int')
但我想知道如何使用Lambda或map()或filter(?)以不同的方式(当然更长)。
有人能指出我的另类解决方案吗?
感谢。
答案 0 :(得分:1)
您可能只想要above(Top15['% Renewable'], Top15['% Renewable'].median())
。 map
接受一系列对象并将函数应用于每个对象,但您只想应用一次。您得到的错误是因为您传入的两个值无法循环。
答案 1 :(得分:0)
所以你基本上想要这样的东西:
Top15['HighRenew'] = Top15.apply(lambda df: int(df['% Renewable'] >= Top15['% Renewable'].median()))