pandas groupby 的用户定义函数

时间:2021-03-04 15:04:42

标签: python pandas

def integration(*arg):
    try:
        return np.sum(arg)
    except:
        name = arg
        return name

嗨~这是我的函数,我想像这样将这个函数应用到DataFrame

   k  g  r
0  dd cc hh
1  bb  1  9
2  dd aa ll
3  bb  4  6

我得到的结果是

     g    r
k  
bb   5    15
dd  ccaa  hhll

我想要“cc”而不是“ccaa”和“hh”而不是“hhll”。当自定义函数的输入长度超过2个或更多时,我只想反映上面的一个。

2 个答案:

答案 0 :(得分:0)

类似于:

def integration(*arg):
    try:
        if type(np.sum(arg))==string:
            return np.sum(arg)[0:2]
        else:
            return np.sum(arg)
    except:
        name = arg
        return name

答案 1 :(得分:0)

您可以执行以下操作,这更麻烦:

# Set the 'k' columns as index
df.set_index('k', inplace=True)

#Then you need to separate numbers from strings so you can change them to integers
df_numeric = df.apply(lambda x: x[x.str.contains(r'^\d+')]).astype(int).groupby(level=0).sum()
df_object = df.apply(lambda x:x[~(x.str.contains(r'^\d+'))])

df = pd.concat([df_numeric, df_object]).reset_index().drop_duplicates('k', keep='first')

输出:

    k   g   r
0   bb  5   15
1   dd  cc  hh
相关问题