Python 在一个多索引级别上进行复制、分配和广播 将numpy导入为np 作为pd进口熊猫 np\u rng=np.random.default\u rng() df=pd.DataFrame({ ‘v1’:[‘a’、‘b’、‘b’、‘a’、‘a’、‘c’、‘c’], “v2”:[1,1,1,2,1,2,1,2], “val”:np_rng.uniform(大小=8), }) g1=df.groupby(['v1','v2'])[['val']].mean() g2=df.groupby('v1')[['val']].mean()

Python 在一个多索引级别上进行复制、分配和广播 将numpy导入为np 作为pd进口熊猫 np\u rng=np.random.default\u rng() df=pd.DataFrame({ ‘v1’:[‘a’、‘b’、‘b’、‘a’、‘a’、‘c’、‘c’], “v2”:[1,1,1,2,1,2,1,2], “val”:np_rng.uniform(大小=8), }) g1=df.groupby(['v1','v2'])[['val']].mean() g2=df.groupby('v1')[['val']].mean(),python,pandas,Python,Pandas,是否可以将列g2['val']分配给g1,在g1的v1索引级别上广播,但不分配给g2 这是期望的结果: val val_m v1 v2 a 1 0.574011 0.609789 2 0.681344 0.609789 b 1 0.653014 0.719828 2 0.853454 0.719828 c 1 0.279289 0.528449 2 0.777608 0.528449 这正是DataFr

是否可以将列
g2['val']
分配给
g1
,在
g1
v1
索引级别上广播,但不分配给
g2

这是期望的结果:

            val     val_m
v1 v2
a  1   0.574011  0.609789
   2   0.681344  0.609789
b  1   0.653014  0.719828
   2   0.853454  0.719828
c  1   0.279289  0.528449
   2   0.777608  0.528449

这正是
DataFrame.join
的用途!默认情况下,它使用数据帧索引进行连接,并且在连接部分索引时没有问题。别忘了:沿索引广播只是索引上的左连接

g3=g1.join(g2.rename(columns={'val':'val_m'}))
印刷品(g3)
这将返回所需的输出:

001 | val val|m
002 | v1 v2
003 | a 10.563699 0.376579
004 |    2   0.002338  0.376579
005 | b 1 0.776224 0.659765
006 |    2   0.426846  0.659765
007 | c 1 0.053235 0.495630
008 |    2   0.938024  0.495630