【问题标题】:pandas compare two dataframes with criteria熊猫将两个数据框与标准进行比较
【发布时间】:2015-05-22 20:35:30
【问题描述】:

我有两个数据框。 df1 和 df2。 我想从 df1 和 df2 中获取任何共同的值,并且 df2 的 dt 值必须大于 df1 的 dt 值 在这种情况下,期望值是费用

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)

【问题讨论】:

  • 如果 Ed 回答了您的问题,最好接受它(单击复选标记),以便人们知道问题已得到解答。 (以及您提出的问题的任何其他答案)。这对你来说也是 2 分,对 Ed 来说是 15 分,并且是提高人们回答你未来问题的几率的好方法。 ;-)

标签: python pandas dataframe


【解决方案1】:

一种方法是在“值”列上合并,这样只会产生匹配的行,然后您可以使用“dt_x”、“dt_y”列过滤合并的df:

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: 系列长度必须匹配才能比较

【讨论】:

  • 谢谢!这正是我想要的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-16
  • 2022-12-13
  • 1970-01-01
相关资源
最近更新 更多