首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >了解熊猫羔羊的功能

了解熊猫羔羊的功能
EN

Stack Overflow用户
提问于 2018-03-02 12:58:51
回答 3查看 13.2K关注 0票数 3

我正试图解决Python课程的一个问题,发现有人在github中实现了相同问题的解决方案。我只是想了解github中给出的解决方案。

我有一只熊猫,名叫Top15,有15个国家,其中一个专栏是'HighRenew‘。本栏存储每个国家使用的可再生能源的百分比。我的任务是将'HighRenew‘列中的列值转换为布尔数据类型。

如果某一国家的价值高于所有15个国家的可再生能源百分比中位数,那么我应该将其编码为1,否则它应该是0。“HighRenew”列从下面复制的dataframe中被分割成一个系列。

代码语言:javascript
复制
Country
China                  True
United States         False
Japan                 False
United Kingdom        False
Russian Federation     True
Canada                 True
Germany                True
India                 False
France                 True
South Korea           False
Italy                  True
Spain                  True
Iran                  False
Australia             False
Brazil                 True
Name: HighRenew, dtype: bool

github解决方案分3个步骤实现,其中我理解使用lambda函数的前两个步骤,但不是最后一个步骤。有人能解释一下这个lambda函数是如何工作的吗?

代码语言:javascript
复制
median_value = Top15['% Renewable'].median()
Top15['HighRenew'] = Top15['% Renewable']>=median_value
Top15['HighRenew'] = Top15['HighRenew'].apply(lambda x:1 if x else 0)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-03-02 12:59:55

我认为apply是引擎盖下的循环,最好是使用矢量化的astype --它将True转换为1,将False转换为0

代码语言:javascript
复制
Top15['HighRenew'] = (Top15['% Renewable']>=median_value).astype(int)
代码语言:javascript
复制
lambda x:1 if x else 0

表示带有条件的匿名函数(lambda函数)-如果True返回1,则返回0

有关lambda函数的更多信息,请检查this answers

票数 2
EN

Stack Overflow用户

发布于 2018-03-02 13:03:16

lambda表示匿名(即未命名)函数。如果它与pd.Series.apply一起使用,则将该系列的每个元素输入到lambda函数中。结果将是另一个pd.Series,每个元素都在lambda中运行。

apply + lambda只是一个很少隐藏的循环。您应该更喜欢在可能的情况下使用矢量化功能。@jezrael提供这样一个vectorised solution

给定一个列表lst,常规python中的等价物如下。在这里,lst的每个元素都通过lambda函数传递并聚合到一个列表中。

代码语言:javascript
复制
list(map(lambda x: 1 if x else 0, lst))

使用if x而不是if x == True测试"Truthy“值是Pythonic的成语,有关True的更多信息,请参见this answer

票数 5
EN

Stack Overflow用户

发布于 2018-03-02 13:26:38

与其使用变通方法或lambdas,只需使用Panda的内置功能来解决这个问题。这种方法称为掩蔽,本质上我们对Series (df列)使用比较器来获得布尔值:

代码语言:javascript
复制
import pandas as pd
import numpy as np

foo = [{
    'Country': 'Germany',
    'Percent Renew': 100
}, {
    'Country': 'Germany',
    'Percent Renew': 75
}, {
    'Country': 'China',
    'Percent Renew': 25
}, {
    'Country': 'USA',
    'Percent Renew': 5
}]

df = pd.DataFrame(foo, index=pd.RangeIndex(0, len(foo)))

df

#| Country   | Percent Renew |
#| Germany   | 100           |
#| Australia | 75            |
#| China     | 25            |
#| USA       | 5             |

np.mean(df['Percent Renew'])
# 51.25

df['Better Than Average'] = df['Percent Renew'] > np.mean(df['Percent Renew'])

#| Country   | Percent Renew | Better Than Average |
#| Germany   | 100           | True
#| Australia | 75            | True
#| China     | 25            | False
#| USA       | 5             | False

我之所以比其他解决方案提出这种方法的具体原因是,掩蔽也可以用于许多其他目的。我不会在这里讨论它们,但是一旦你了解到熊猫支持这种功能,在熊猫中执行其他数据操作就变得容易多了。

编辑:,我读取需要boolean数据类型作为需要True False,而不是需要编码版本10,在这种情况下,提出的astype将充分地将布尔值转换为整数值。然而,为了掩盖的目的,“真”“假”是切片所必需的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49069624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档