我有一个多索引DataFrame,第一级作为组ID,第二级作为元素名.还有更多的组,但下面只显示了第一组.
2000-01-04 2000-01-05 Group Element 1 A -0.011374 0.035895 X -0.006910 0.047714 C -0.016609 0.038705 Y -0.088110 -0.052775 H 0.000000 0.008082
我有另一个DataFrame只包含1个索引,即组ID.两者的列是相同的,它们是日期.
2000-01-04 2000-01-05 Group 1 -0.060623 -0.025429 2 -0.066765 -0.005318 3 -0.034459 -0.011243 4 -0.051813 -0.019521 5 -0.064367 0.014810
我想使用第二个DataFrame来过滤第一个DataFrame,检查每个元素是否小于该日期组的值,以获得如下所示:
2000-01-04 2000-01-05 Group Element 1 A False False X False False C False False Y True True H False False
最终,我只对真实的元素和它们的真实日期感兴趣.在迭代日期中真实的元素列表将是很好的,我通过制作False NaN然后使用dropNa()来做.
我知道我可以编写一堆嵌套for循环来做到这一点,但时间至关重要;我想不出一种方法来使用pandas数据帧结构本质上和pythonically来做到这一点.任何帮助将非常感谢!
解决方法
您可以使用groupby申请:
In [11]: g = df1.groupby(level='Group') In [12]: g.apply(lambda x: x <= df2.loc[x.name]) Out[12]: 2000-01-04 2000-01-05 Group Element 1 A False False X False False C False False Y True True H False False