根据另一个(相同的行数)数据框对列进行分组

希拉里·桑德斯(Hillary Sanders)

假设我有两个简单的数据框:

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

为什么会这样/我能解决吗?

安迪·海登(Andy Hayden)

您不能传递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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据另一个数据框对数据框的列进行分组

根据另一个数据框的值对数据框条目进行分组

构建一个数据框,根据另一个数据框对项目进行分组

根据另一个数据框的列对数据框列进行排序

根据另一个数据框的匹配列删除随机的行数

根据与另一个数据框中的值匹配的行数创建新列

根据另一个定制顺序的列对数据框中的列对进行排序

根据另一个因子列对R数据框中的因子列进行排序

在Dataframe中对列进行分组,并使用分组的数据创建另一个数据框

根据另一个数据框中的相同列组合替换数据框中的 NA

聚合数据框上的列,根据另一个数据框将其分组,而不合并它们

如何根据熊猫中另一个数据框中的列对数据框进行排序?

如何根据另一个数据框列值对数据框进行排序?

根据另一个数据框中的信息对数据框进行分类

熊猫使用列分组按另一个数据框更新数据框

根据Python中另一个数据框的列对一个数据框的行进行排序(重复的列)

如何根据另一个数据框上的列对数据框的行进行分类?

如何基于具有相同列但顺序不同的另一个数据框对列进行重新排序

如何将选择列的行值与另一个数据框中的相同列进行比较?

根据另一个数据框列更新数据框列,无需 for 循环

根据另一个数据框的列填充熊猫数据框列

Pandas - 根据另一个填充一个数据框列

根据条件用另一个数据框替换数据框列 - R

根据另一个数据框的列值过滤数据框

根据python中另一个数据框的2列过滤数据框

根据另一个数据框的多个列过滤数据框

根据另一个数据框向熊猫数据框列添加值

根据另一个数据框计算数据框中的列值

根据条件为另一个数据框的数据框列设置值