Pandas中的Lambda函数表示法

时间:2017-07-21 01:00:47

标签: python pandas lambda

我刚刚从用户那里收到了一个很棒的lambda函数。

actresses_modified['Winner_Count'] = actresses_modified.apply(lambda x: actresses_modified.Name.value_counts()[x.Name], axis=1)

应用它的数据框如下所示:

    Year    Award           Winner  Name
2   1928    Best Actress    0.0     Louise Dresser
3   1928    Best Actress    1.0     Janet Gaynor
4   1928    Best Actress    0.0     Gloria Swanson
40  1929    Best Actress    0.0     Ruth Chatterton
41  1929    Best Actress    0.0     Betty Compson

问题是我忘记了它是如何工作的(我不得不离开这个“为了好玩”的项目),更具体地说,正是 [x.Name] 正在发生的事情。

actresses_modified.Name.value_counts()本身为我提供了数据框中所有女演员姓名的计数。 [x.Name]在英语中的含义是什么,如何在数据框的Winner列中计算每个人姓名旁边的所有1,并返回正确的总数?同样重要的是,这种类型的语法是否有名称?我的谷歌搜索出现了虚无...。

任何想法都会受到赞赏吗?

1 个答案:

答案 0 :(得分:1)

在这里,我不确定我是否在评论中表明了自己的看法。因此,apply方法"沿DataFrame的输入轴应用函数。"所以,为了简单起见,我们假设我们有一个名为actress_modified的Actress对象的集合,它看起来像这样:

   actresses_modified = [<Actress>, <Actress>, <Actress>, <Actress>]

我们假设这是Actress定义的方式:

class Actress:
    Name = "Some String"

然后我们将lambda函数应用于集合中的每个女演员xvalue_counts()返回&#34;包含唯一值计数的对象。&#34;

因此,当我们为每个女演员致电value_counts()时,我们会通过按键获得该女演员的计数值。让我们假装value_counts()返回一个带有女演员姓名和他们的&#34;计数&#34;它看起来像这样:

counts = {
    'Jane Doe': 1,
    'Betty Ross': 3,
}

我们的女演员对象与女演员1 Name是&#34; Jane Doe&#34;,所以当我们致电value_counts()[x.Name]我们正在做{{1这将返回1.