从DataFrameGroupby处理整个列

时间:2014-12-11 14:09:09

标签: pandas apply reduce

我有一个处理两个系列的功能。该算法需要该函数来接收整个系列。 我有数据存储在DataFrameGroupBy对象中。因此,我想将该函数应用于整个列。 哪种方式最常用?

我已经制作了一些试图简化手头问题的代码:

import numpy as np
import pandas as pd

df = pd.DataFrame({
    'clients': pd.Series(['A', 'A', 'A', 'B', 'B']),
    'odd1': pd.Series(['1', '2', '3', '4', '5']),
    'odd2': pd.Series(['6', '7', '8', '9', '10'])})

def strange_fun(s1, s2):
    return np.sum(s1) + np.sum(s2)

df.groupby('clients')[['odd1', 'odd2']].apply(lambda el: strange_fun(el[0], el[1]), axis=0)

我有点bit confused

1 个答案:

答案 0 :(得分:1)

是将整个组(作为DataFrame)传递给一个选项,然后将其拆分到函数中吗?

如果需要引用实际列,可以传递名称:

def strange_fun(el, cols):

    s1 = el[cols[0]]
    s2 = el[cols[1]]

    return np.sum(s1) + np.sum(s2)

df.groupby('clients')[['odd1', 'odd2']].apply(lambda el: strange_fun(el, ['odd1', 'odd2']))

或者只是通过整数索引列:

def strange_fun(el):

    s1 = el.iloc[:,0]
    s2 = el.iloc[:,1]

    return np.sum(s1) + np.sum(s2)

df.groupby('clients')[['odd1', 'odd2']].apply(lambda el: strange_fun(el))