2015-05-22 2 views
0

У меня есть два кадра данных. df1 и df2. Я хотел бы получить то, что ценности являются общими от df1 и df2 и значение дт из df2 должно быть больше, чем значение Dt df1 в В этом случае ожидаемая величина платаpandas сравнить два фрейма данных с критериями

df1 = pd.DataFrame([['2015-01-01 06:00','foo'], 
    ['2015-01-01 07:00','fee'], ['2015-01-01 08:00','fum']], 
    columns=['dt', 'value']) 
df1.dt=pd.to_datetime(df1.dt) 

df2=pd.DataFrame([['2015-01-01 06:10','zoo'], 
    ['2015-01-01 07:10','fee'],['2015-01-01 08:10','feu'], 
    ['2015-01-01 09:10','boo']], columns=['dt', 'value']) 
df2.dt=pd.to_datetime(df2.dt) 
+0

Если Ed ответил на ваш вопрос, это хорошо, чтобы принять его (нажмите на галочку), чтобы люди знали, вопрос ответ. (а также любые другие ответы на заданные вами вопросы). Это также 2 очка для вас, от 15 до Эд, и хороший способ улучшить шансы, что люди ответят на ваши будущие вопросы. ;-) – JohnE

ответ

2

Одним из способов было бы объединить на колонке «значения» так что это будет производить только совпадающие строки, то вы можете фильтровать объединенный ДФ с помощью «dt_x», «столбцы dt_y»:

In [15]: 

merged = df2.merge(df1, on='value') 
merged[merged['dt_x'] > merged['dt_y']] 
Out[15]: 
       dt_x value    dt_y 
0 2015-01-01 07:10:00 fee 2015-01-01 07:00:00 

вы не можете сделать что-то вроде следующего, потому что длины не соответствуют:

df2[ (df2['value'].isin(df1['value'])) & (df2['dt'] > df1['dt']) ] 

поднимает:

ValueError: Series lengths must match to compare

+0

Спасибо! Это именно то, что я искал – NinjaGaiden

Смежные вопросы