将函数应用于pandas dataframe groupby中的第二列

时间:2016-10-25 23:09:14

标签: python pandas dataframe

在pandas数据框中,可以使用函数对其索引进行分组。我正在寻找一个代替应用于列的函数。

我希望按两列分组,除了我需要第二列按任意函数foo分组:

group_sum = df.groupby(['name', foo])['tickets'].sum()

如何定义foo以将第二列分组为两组,例如,值是否为> 0划分?或者,使用完全不同的方法或语法?

2 个答案:

答案 0 :(得分:6)

Groupby可以接受标签和系列/数组的任意组合(只要数组与数据帧的长度相同),因此您可以将函数映射到列并将其传递给groupby,例如

df.groupby(['name', df[1].map(foo)])

或者,您可能希望在执行groupby之前将条件作为新列添加到数据框中,这样做的好处是可以在索引中为其指定名称:

df['>0'] = df[1] > 0
group_sum = df.groupby(['name', '>0'])['tickets'].sum()

答案 1 :(得分:2)

这样的事情会起作用:

x.groupby(['name', x['value']>0])['tickets'].sum()

如上所述,groupby可以接受标签和系列。这应该给你你正在寻找的答案。这是一个例子:

data = np.array([[1, -1, 20], [1, 1, 50], [1, 1, 50], [2, 0, 100]])
x = pd.DataFrame(data, columns = ['name', 'value', 'value2'])
x.groupby(['name', x['value']>0])['value2'].sum()

name  value
1     False     20
      True     100
2     False    100
Name: value2, dtype: int64