使用用户定义的函数进行分组的 Pandas

50 浏览
0 Comments

使用用户定义的函数进行分组的 Pandas

我理解将函数作为分组键传递时,该函数会按照每个索引值调用一次,并将返回值用作分组名称。但我无法弄清楚如何在列值上调用该函数。

所以我可以这样做:

people = pd.DataFrame(np.random.randn(5, 5), 
                      columns=['a', 'b', 'c', 'd', 'e'],
                      index=['Joe', 'Steve', 'Wes', 'Jim', 'Travis'])
def GroupFunc(x):
    if len(x) > 3:
        return 'Group1'
    else:
        return 'Group2'
people.groupby(GroupFunc).sum()

这将数据分成两组,其中一组的索引值长度小于等于3,另一组的索引值长度大于3。但是如何传递其中一列的值呢?例如,如果每个索引点的列d的值大于1。我意识到我可以简单地这样做:

people.groupby(people.a > 1).sum()

但我想知道如何在用户定义的函数中做到这一点,以供将来参考。

类似于这样:

def GroupColFunc(x):
if x > 1:
    return 'Group1'
else:
    return 'Group2'

但是我该如何调用它呢?

我尝试了:

people.groupby(GroupColFunc(people.a))

和类似的变体,但这不起作用。

我如何将列值传递给函数?

如果要根据people.a > people.b这样的条件进行分组,我该如何传递多个列值?

0