pandas groupby应用接受Ncolumn帧并返回obj的函数

2024-04-20 10:27:36 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有类似的“transform”方法来将一个函数应用于组(同时所有列)并返回一个对象?我尝试的任何操作似乎都会在组中的每列返回一个对象。在

例如,考虑数据

               Maturity                Date      s  Term  Month
0   2012-02-01 00:00:00 2012-01-03 00:00:00  2.993    29      2
18  2012-03-01 00:00:00 2012-01-03 00:00:00  3.022    58      3
57  2012-04-01 00:00:00 2012-01-03 00:00:00  3.084    89      4
117 2012-05-01 00:00:00 2012-01-03 00:00:00  3.138   119      5
...

假设我在Date上做了一个groupby,并对标记为(Term,Month,s)的组应用一些函数。结果应该是

^{pr2}$

显然,我可以在组中迭代并聚合结果,但我想我只是错过了一些关于如何使用转换方法的明显信息。在


Tags: 数据对象方法函数标记信息datetransform
1条回答
网友
1楼 · 发布于 2024-04-20 10:27:36

您可以应用该函数,然后手动聚合每个组。例如,假设聚合是平均值,函数是列的和,则可以:

df.groupby("Date")['Term', 'Month', 's'].apply(lambda rows: np.mean(rows['Term'] + rows['Month'] + rows['s']))

因此,如果我们假设一个fit方法,它从一个包含“month”、“Term”和“s”列的数据框中构建一些模型:

^{pr2}$

以及一个数据帧,其中包含一系列日期的列:

df = pd.DataFrame({"date":  ["20140101", "20140202", "20140203"] * 4, "Term" : np.random.randint(100, size=12),"month": np.random.randint(12, size=12),"s": np.random.rand(12)*3})
print df

(输出:)

    Term      date  month         s
0     24  20140101      6  2.364798
1     43  20140202      9  0.066188
2     59  20140203      6  1.078052
3     40  20140101      3  1.982825
4     34  20140202      4  2.089518
5     20  20140203      1  2.412956
6     84  20140101      8  0.779843
7     62  20140202      9  0.918860
8     32  20140203     11  2.613289
9     16  20140101      9  0.788347
10    23  20140202      6  0.982986
11    27  20140203      1  0.658260

然后我们可以对每组行同时对所有列应用fit():

modelPerDate = df.groupby("date").apply(fit)
print modelPerDate

生成模型的数据帧,每个日期一个:

date
20140101    {'param2': 0.70786647858131047, 'param1': 50.0}
20140202    {'param2': 0.71852297283637756, 'param1': 49.5}
20140203    {'param2': 0.83876295773013798, 'param1': 45.5}

相关问题 更多 >