我試圖通過另一個DataFrame的值過濾一個DataFrame,但無法使其工作,因爲通過DataFrame的過濾器的大小與要過濾的DataFrame的大小不同。我認爲我需要使用以某種方式對齊兩個數據幀,但這可能是錯誤的。比較不同長度的數據框
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
預期數據幀將是pd.DataFrame({'a': [1, 3, 3], 'b': [3, 2, 6]})
:
a b
0 1 3
1 3 2
2 3 6
(所有<a, b>
行從df1
爲其在df2
的b
值爲<消失=在df1
的b
值和兩個a
值匹配df1
和df2
)。
更新
更幼稚的方式不起作用要麼...
>>> 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