我有一个由多项式1d对象组成的数据帧,我想对数据帧进行分组,然后将组内的所有多项式系数求和,然后除以组中的行数。在
但是,我在处理poly1d对象时遇到了困难。在
def agg_coeffs(df):
g_all = pd.DataFrame()
for key, g in df.groupby(['A', 'B']):
agg_coeffs = pd.DataFrame({"agg coeffs":list(sum(g['coeffs']) / len(g['coeffs']))})
g_all = pd.concat([g_all, agg_coeffs])
return g_all
上面的函数在单独的行中输出修改后的系数,但我希望它们都在同一行中,保持为poly1d对象(而不是数组或列表)。在
错误输出:
^{pr2}$示例数据帧:
coeffs A B
10227 [0.0767614738203, 91.6253393665] 2016 p1
10311 [4.47454751131, 44.9313348416] 2016 p2
10367 [2.38170652877, 133.884680026] 2016 p3
10309 [0.736288998358, 84.6403688266] 2016 p4
注意:与poly1d对象一样,“coeffs”列中的单元如下所示: 0.0767614738203 x2+91.625393665+10(截距不显示在数据帧中,但在从测向分组的小区中出现截距。在
预期输出:
coeffs A B
0 [1.91, 88.76] 2016 p1
将函数改为(移除列表包装器):
def agg_coeffs(df):
g_all = pd.DataFrame()
for key, g in df.groupby(['A', 'B']):
g.loc[:,'agg coeffs'] = sum(g['coeffs']) / len(g['coeffs'])
g_all = pd.concat([g_all, g])
return g_all
在g.loc[:,'agg coeffs'] = sum(g['coeffs']) / len(g['coeffs']
行中导致此错误:
ValueError: Must have equal len keys and value when setting with an iterable
拆分为常规数值列:
然后是groupby和agg:
^{pr2}$给你:
然后组合回poly1d对象:
给你:
但是要小心:poly1d包含一个引用,而不是其参数的副本,因此如果删除c1/c2/c3列,它将损坏coeff。如果需要,可以通过在apply期间复制poly1d参数来解决这个问题。在
相关问题 更多 >
编程相关推荐