“by = lambda x: lambda y: getattr(y, x)” 的意思是什么?

3

有一个叫做"subset"的数据框,代码如下。pd是pandas的昵称。我无法理解by = lambda x: lambda y: getattr(y, x)的含义。

pivot = pd.pivot_table(subset, values='count', rows=['date'], cols=['sample'], fill_value=0)
by = lambda x: lambda y: getattr(y, x)
grouped = pivot.groupby([by('year'),by('month')]).sum()

可能是为什么Python的lambda函数很有用?的重复问题。 - Mephy
1
假设yearmonth是列,我猜它正在执行与grouped = pivot.groupby(['year', 'month']).sum()相同的操作。 - Stefano Potter
yearmonth不是列名。它们在代码中首次出现,可以成功运行。子集中有一个名为“date”的列,我正在尝试找到它们之间的关系。@StefanoPotter - zhql0907
1个回答

2

by = lambda x: lambda y: getattr(y, x) 等同于以下代码:

def by(x):
    def getter(y):
        return getattr(y, x)
    return getter

getattr(a, b) 获取对象a中名称为b的属性。

因此,by('bar') 返回一个函数,该函数从对象中返回属性'bar'

by('bar')(foo) 表示 getattr(foo, 'bar'),大致相当于 foo.bar

如果还有不明白的地方,请告诉我们具体哪个部分有困难。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接