我有一个多索引 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
最终,我只对为 True 的元素和它们为 True 的日期感兴趣。在日期迭代中为真的元素列表会很棒,我已经通过制作 False NaN 然后使用 dropNa() 来做到这一点。
我知道我可以写一堆嵌套的 for 循环来做到这一点,但时间至关重要;我想不出一种方法来本质上和 python 地使用 pandas 数据帧结构来做到这一点。任何帮助将不胜感激!
最佳答案
您可以使用 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
关于python - 使用另一个 DataFrame 过滤 Pandas DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21175059/