Я пытаюсь отфильтровать один DataFrame значениями другого DataFrame, но не могу заставить его работать, поскольку фильтр-by-DataFrame имеет другой размер, чем те, которые будут фильтроваться DataFrame , Я думал, что мне нужно использовать set_index
, чтобы как-то совместить оба DataFrames, но это может быть неправильно.Сравнение DataFrames разной длины
import pandas as pd
df1 = pd.DataFrame({'a': [1, 1, 2, 3, 3, 4], 'b': [5, 3, 6, 2, 6, 4]})
df2 = pd.DataFrame({'a': [1, 2, 3, 4], 'b': [3, 5, 6, 3]})
dfa = df1.set_index('a')
>>> dfa
b
a
1 5
1 3
2 6
3 2
3 6
4 4
dfb = df2.set_index('a')
>>> dfa[dfa['b'] <= dfb['b']]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/core/ops.py", line 699, in wrapper
raise ValueError('Series lengths must match to compare')
ValueError: Series lengths must match to compare
Ожидаемый DataFrame будет pd.DataFrame({'a': [1, 3, 3], 'b': [3, 2, 6]})
:
a b
0 1 3
1 3 2
2 3 6
(все <a, b>
строки исчезают из df1
, для которого значение b
в df2
является < = значение b
в df1
и оба a
значения совпадают для df1
и df2
).
Update
Более наивный способ не работает, либо ...
>>> df1[(df1['a'] == df2['a']) & (df1['b'] <= df2['b'])]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/core/ops.py", line 699, in wrapper
raise ValueError('Series lengths must match to compare')
ValueError: Series lengths must match to compare