关键词

python中pandas操作apply返回多列的实现

在python的pandas中,apply函数是一个常用的操作函数,它可以对数据框进行行或列或元素的操作,可以返回一个标量、一个Series或一个新的DataFrame。同样地,apply也支持返回多列。

实现方法

我们需要定义一个要被apply的函数,并使用apply函数调用该函数,代码如下:

def func(row):
    # do something
    return pd.Series([val1, val2, val3])

df.apply(func, axis=1)

其中axis=1表示对行进行操作,func是对每一行所执行的函数,返回值需要是一个Series,该Series包含了所有想要返回的列。例如这个示例中,我们想要返回三列val1val2val3

示例一

我们来看一个实际的例子:

假设我们有一个数据框,其中有三列idageheight。我们想要根据年龄段分类,并统计每个年龄段中身高的贡献度。

import pandas as pd
import numpy as np

data = {
    'id': ['001', '002', '003', '004', '005', '006', '007', '008', '009', '010'],
    'age': [20, 21, 20, 23, 25, 26, 21, 22, 23, 24],
    'height': [176, 172, 179, 182, 166, 178, 183, 175, 171, 184],
}
df = pd.DataFrame(data)

def contribution(row):
    row['contribution'] = row['height'] / row['height'].sum()
    return row

df.groupby('age').apply(contribution)

经过上述代码的处理,我们将新的列contribution加入到了原数据框中,并且同时统计了每个年龄段中身高的贡献度。

示例二

再看一个简单的例子,假设我们有一个数据框,其中有三列abc。我们想要根据ab的值统计c的和以及c中每个元素的平均值。

import pandas as pd
import numpy as np

data = {
    'a': [1, 2, 1, 2, 1, 2],
    'b': [3, 4, 3, 4, 3, 4],
    'c': [5, 7, 9, 11, 13, 15]
}
df = pd.DataFrame(data)

def agg_func(x):
    return pd.Series({
        'sum_c': np.sum(x['c']),
        'mean_c': np.mean(x['c']),
    })

df.groupby(['a', 'b']).apply(agg_func)

我们首先使用groupby函数根据ab的值进行分组,然后使用apply函数调用agg_func函数,该函数会返回一个包含两个元素的Series:sum_cmean_c。最终结果为一个以ab为索引的新数据框,该数据框中包含两列:sum_cmean_c

本文链接:http://task.lmcjl.com/news/17482.html

展开阅读全文