我想加入两个DataFrame,其中一个(df1
)具有三级多索引,而另一个Dataframe(df2
)具有相同的索引和一个额外索引。两者都有一列值。
我想合并这些。我已经知道如何。 但是还有一个问题:df2不如df1长。
一个例子:
>>> df1
No. individuals
Year Age School
2000 6 'A' 798
2000 6 'B' 7398
2000 7 'A' 348
2000 7 'B' 528
2000 8 'A' 9158
2000 8 'B' 423
2005 6 'A' 592
2005 6 'B' 455
2005 7 'A' 4566
2005 7 'B' 789
2005 8 'A' 212
2005 8 'B' 78
2010 6 'A' 532
2010 6 'B' 654
2010 7 'A' 4222
2010 7 'B' 724
2010 8 'A' 224
2010 8 'B' 153
>>> df2
Avg. Grades
Year Age School Class
2000 6 'A' 'x' 5.3
2000 6 'A' 'y' 3.3
2000 6 'B' 'x' 8.1
2000 6 'B' 'y' 4.4
2000 7 'A' 'x' 1.4
2000 7 'A' 'y' 5.3
2000 7 'B' 'x' 1.2
2000 7 'B' 'y' 6.3
2000 8 'A' 'x' 9.2
2000 8 'A' 'y' 0.9
2000 8 'B' 'x' 0.1
2000 8 'B' 'y' 2.2
2005 6 'A' 'x' 5.9
2005 6 'A' 'y' 1.0
2005 6 'B' 'x' 4.0
2005 6 'B' 'y' 1.0
2005 7 'A' 'x' 4.0
2005 7 'A' 'y' 5.0
2005 7 'B' 'x' 6.0
2005 7 'B' 'y' 7.9
2005 8 'A' 'x' 7.0
2005 8 'A' 'y' 3.0
2005 8 'B' 'x' 9.0
2005 8 'B' 'y' 1.9
df2
是比df1
多的索引级别。因此,合并这些课程时,'x'
级和'y'
级的每年,年龄和学校中的人数应该相同。
如果我删除了year=2010
中所有df1
的行,我就做到了。我通过以下方式加入了他们:
result = df2.join(df1, on='Year','Age','School'],how='left')
>>> result
Avg. Grades No. individuals
Year Age School Class
2000 6 'A' 'x' 5.3 798
2000 6 'A' 'y' 3.3 798
2000 6 'B' 'x' 8.1 7398
2000 6 'B' 'y' 4.4 7398
2000 7 'A' 'x' 1.4 348
2000 7 'A' 'y' 5.3 348
2000 7 'B' 'x' 1.2 528
2000 7 'B' 'y' 6.3 528
2000 8 'A' 'x' 9.2 9158
2000 8 'A' 'y' 0.9 9158
2000 8 'B' 'x' 0.1 423
2000 8 'B' 'y' 2.2 423
2005 6 'A' 'x' 5.9 592
2005 6 'A' 'y' 1.0 592
2005 6 'B' 'x' 4.0 455
2005 6 'B' 'y' 1.0 455
2005 7 'A' 'x' 4.0 4566
2005 7 'A' 'y' 5.0 4566
2005 7 'B' 'x' 6.0 789
2005 7 'B' 'y' 7.9 789
2005 8 'A' 'x' 7.0 212
2005 8 'A' 'y' 3.0 212
2005 8 'B' 'x' 9.0 78
2005 8 'B' 'y' 1.9 78
但是我想保留df1
中year==2010
处的行。由于df2
上没有行,因此我希望Avg. Grades
,df2
和{中的year==2005
的{{1}}与Age
保持恒定{1}}。
也就是说:
School
我知道,我可以只对Class
的2005年部分进行切片,然后将年份替换为2010年,然后附加在>>> expected
Avg. Grades No. individuals
Year Age School Class
2000 6 'A' 'x' 5.3 798
2000 6 'A' 'y' 3.3 798
2000 6 'B' 'x' 8.1 7398
2000 6 'B' 'y' 4.4 7398
2000 7 'A' 'x' 1.4 348
2000 7 'A' 'y' 5.3 348
2000 7 'B' 'x' 1.2 528
2000 7 'B' 'y' 6.3 528
2000 8 'A' 'x' 9.2 9158
2000 8 'A' 'y' 0.9 9158
2000 8 'B' 'x' 0.1 423
2000 8 'B' 'y' 2.2 423
2005 6 'A' 'x' 5.9 592
2005 6 'A' 'y' 1.0 592
2005 6 'B' 'x' 4.0 455
2005 6 'B' 'y' 1.0 455
2005 7 'A' 'x' 4.0 4566
2005 7 'A' 'y' 5.0 4566
2005 7 'B' 'x' 6.0 789
2005 7 'B' 'y' 7.9 789
2005 8 'A' 'x' 7.0 212
2005 8 'A' 'y' 3.0 212
2005 8 'B' 'x' 9.0 78
2005 8 'B' 'y' 1.9 78
2010 6 'A' 'x' 5.9 532
2010 6 'A' 'y' 1.0 532
2010 6 'B' 'x' 4.0 654
2010 6 'B' 'y' 1.0 654
2010 7 'A' 'x' 4.0 4222
2010 7 'A' 'y' 5.0 4222
2010 7 'B' 'x' 6.0 724
2010 7 'B' 'y' 7.9 724
2010 8 'A' 'x' 7.0 224
2010 8 'A' 'y' 3.0 224
2010 8 'B' 'x' 9.0 153
2010 8 'B' 'y' 1.9 153
上。但是,我尝试合并的实际DataFrame大得多,我必须将切片附加到df2
80次,我确实需要高效。我已经做到了,大约花了时间。只需1分钟。
我希望你们中的一个能帮助我。
谢谢。