假设我有两个简单的数据框:
x1 = pd.DataFrame({'a':[1,2,3,4],
'b':[10,10,20,20],
'c':['z','z','z','o']})
x2 = pd.DataFrame({'e':['foo', 'bar', 'foo', 'foo'],
'f':['baz', 'blah', 'baz', 'blah']})
> x1
a b c
0 1 10 z
1 2 10 z
2 3 20 z
3 4 20 o
> x2
e f
0 foo baz
1 bar blah
2 foo baz
3 foo blah
我想x1
根据中的列将函数应用于组x2
。例如:
x1['avg'] = x1.groupby(x2[['e', 'f']])['a'].transform(np.mean)
*** ValueError: Grouper for '<class 'pandas.core.frame.DataFrame'>' not 1-dimensional
但是我得到这个值错误。
如果groupby拆分来自x1,则不会发生该错误(但出于代码清洁性的原因,我不想将x2
列分配给x1
,我不再赘述。
x1.groupby(['b', 'c'])['a'].transform(np.mean)
0 1.5
1 1.5
2 3.0
3 4.0
为什么会这样/我能解决吗?
您不能传递DataFrame,但可以传递Series的(列表):
In [11]: x1.groupby([x2.e, x2.f])["a"].transform("mean")
Out[11]:
0 2
1 2
2 2
3 4
dtype: int64
更一般而言,您可以使用列表理解功能(如果您要按另一个DataFrame中的所有列进行分组):
In [12]: x1.groupby([x2[col] for col in x2])["a"].transform("mean")
Out[12]:
0 2
1 2
2 2
3 4
dtype: int64
也就是说,继续进行连接可能会更好。...IMO保持变量独立通常是一个好主意。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句