【发布时间】:2021-05-13 01:59:20
【问题描述】:
我有一个带有 idx、grp、X、Y 列的 pandas DataFrame,我想获得一个新列,其中包含 Y 函数相对于 @987654326 的累积积分@。但是,我想将此累积集成应用于由列 grp 定义的 DataFrame 的每个子组。
这就是我正在做的事情:
import numpy as np
import pandas as pd
from scipy import integrate
def myIntegral(DF, n):
A0 = 200
return integrate.cumtrapz((A0/DF.Y)**n, DF.X, initial=0)
data = pd.DataFrame({'idx' : [1,2,3,4,5,6],
'grp' : [2,2,2,2,3,3],
'X' : [.1,.2,.3,.4,.2,.3],
'Y' : [3,4,4,3,2,3]}
)
data.sort_values(by=['grp', 'X'], inplace=True)
out = data.groupby('grp').apply(myIntegral, n=0.5)
out 是 grp 的每个值的一系列 ndarray,我需要将其映射回 DataFrame:
data_grouped = data.groupby('grp')
out2 = []
for grp, DF in data_grouped:
DF['Z'] = out.loc[grp]
out2.append(DF)
data = pd.concat(out2)
它可以工作,但是通过一系列 ndarrays 的步骤看起来真的很难看并且容易出错。建议如何改进?此外,我将使用的数据集相当大,因此我正在努力寻找一个有效的解决方案。
谢谢!
【问题讨论】:
标签: python pandas dataframe pandas-groupby pandas-apply