在pandas数据框中,可以使用函数对其索引进行分组。我正在寻找一个代替应用于列的函数。
我希望按两列分组,除了我需要第二列按任意函数foo
分组:
group_sum = df.groupby(['name', foo])['tickets'].sum()
如何定义foo
以将第二列分组为两组,例如,值是否为> 0
划分?或者,使用完全不同的方法或语法?
答案 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