Python 标识第二个数据帧中值小于第一个数据帧的行

Python 标识第二个数据帧中值小于第一个数据帧的行,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个数据帧,如下面的代码所示。它们的日期都一样。我需要能够识别第二个数据帧中小于同一日期第一个数据帧的值。根据数据,我应该得到1/1/2008,值为33,1/4/2008,值为35等等,因为它小于第一个数据帧中的相应值。我可以得到一个布尔值,但无法从第二个数据帧中得到实际值 import pandas as pd import numpy as np data1 = {'Date': {1: '1/1/2008', 2: '1/2/2008', 3: '1/3/2008', 4

我有两个数据帧,如下面的代码所示。它们的日期都一样。我需要能够识别第二个数据帧中小于同一日期第一个数据帧的值。根据数据,我应该得到1/1/2008,值为33,1/4/2008,值为35等等,因为它小于第一个数据帧中的相应值。我可以得到一个布尔值,但无法从第二个数据帧中得到实际值

import pandas as pd
import numpy as np

data1 = {'Date': {1: '1/1/2008',
  2: '1/2/2008',
  3: '1/3/2008',
  4: '1/4/2008',
  5: '1/5/2008',
  6: '1/6/2008',
  7: '1/7/2008',
  8: '1/8/2008',
  9: '1/9/2008',
 10: '1/10/2008'
   },
 'windspeed': {1: '36',
  2: '38',
  3: '40',
  4: '39',
  5: '45',
  6: '33',
  7: '31',
  8: '39',
  9: '41',
 10: '37'}}

df1 = pd.DataFrame(data1)

data2 = {'Date': {1: '1/1/2008',
  2: '1/2/2008',
  3: '1/3/2008',
  4: '1/4/2008',
  5: '1/5/2008',
  6: '1/6/2008',
  7: '1/7/2008',
  8: '1/8/2008',
  9: '1/9/2008',
 10: '1/10/2008'
  },
 'windspeed': {1: '33',
  2: '39',
  3: '42',
  4: '35',
  5: '43',
  6: '40',
  7: '39',
  8: '37',
  9: '44',
 10: '35'}}

df2 = pd.DataFrame(data2)
设置索引(用于对齐)并比较-

i = df1.set_index('Date')
j = df2.set_index('Date')

j[i.windspeed > j.windspeed]

          windspeed
Date               
1/1/2008         33
1/4/2008         35
1/5/2008         43
1/8/2008         37
1/10/2008        35
如果日期列不相同,可以先使用
align

i, j = i.align(j)
然后,重复相同的比较+过滤步骤。如果希望将
日期
作为另一列,请对结果调用
reset\u index
-

j[i.windspeed > j.windspeed].reset_index()

        Date windspeed
0   1/1/2008        33
1   1/4/2008        35
2   1/5/2008        43
3   1/8/2008        37
4  1/10/2008        35
设置索引(用于对齐)并比较-

i = df1.set_index('Date')
j = df2.set_index('Date')

j[i.windspeed > j.windspeed]

          windspeed
Date               
1/1/2008         33
1/4/2008         35
1/5/2008         43
1/8/2008         37
1/10/2008        35
如果日期列不相同,可以先使用
align

i, j = i.align(j)
然后,重复相同的比较+过滤步骤。如果希望将
日期
作为另一列,请对结果调用
reset\u index
-

j[i.windspeed > j.windspeed].reset_index()

        Date windspeed
0   1/1/2008        33
1   1/4/2008        35
2   1/5/2008        43
3   1/8/2008        37
4  1/10/2008        35
更新

df1[df1.set_index('Date').windspeed.gt(df2.set_index('Date').windspeed).values]
Out[250]: 
         Date  windspeed
1    1/1/2008         36
4    1/4/2008         39
5    1/5/2008         45
8    1/8/2008         39
10  1/10/2008         37
更新

df1[df1.set_index('Date').windspeed.gt(df2.set_index('Date').windspeed).values]
Out[250]: 
         Date  windspeed
1    1/1/2008         36
4    1/4/2008         39
5    1/5/2008         45
8    1/8/2008         39
10  1/10/2008         37

这正是我以前得到的。只是需要那些价值较低的,这正是我以前得到的。只需要那些有价值的较小的Hanks@coldspeed。这就是我要找的。快速提问。如果我不在乎日期,我该如何删除该列?@rajeev你需要
j[I.windspeed>j.windspeed].reset_index(drop=True)
Awesome。。谢谢谢谢@coldspeed。这就是我要找的。快速提问。如果我不在乎日期,我该如何删除该列?@rajeev你需要
j[I.windspeed>j.windspeed].reset_index(drop=True)
Awesome。。谢谢