【问题标题】:Comparing values in the indices of two dataframes in pandas比较熊猫中两个数据框的索引中的值
【发布时间】:2018-03-12 20:36:06
【问题描述】:

我正在尝试比较一个 dataframe1 中的 timedelta 值等于另一个 dataframe2 中的 timedelta 值的索引,然后修剪具有更多值的数据帧以使它们同时启动:

数据集1:

    TimeStamp            Col1  ...  Col2500
    0 days  10:37:34     346   ...  635
    0 days  10:38:34     124   ...  546
    0 days  10:39:34     346   ...  745

数据集2:

    TimeStamp          Col1  ...  Col50
    0 days  10:25:20   123   ...   789
    0 days  10:25:45   183   ...   787
    ...
    ...
    0 days  10:37:40   223   ...   789

    for i in df2.index:
            if str(df1.index[0])[7:12] == str(df2.index[i])[7:12]:
                index_value = i
                break
     df2 = df2.drop(df2.index[[0,i-1]])

预期输出将是 Dataset2 与 Dataset1 同时开始(最接近分钟)

【问题讨论】:

  • df2[df1.index]?
  • 使用pandas datetime 和 time delta 查找哪个日期最接近另一个数据框中的相应日期
  • @YaleNewman 如果不准确,您能否详细说明如何检查最接近的时间。不好意思,我刚开始学pandas
  • 如果您可以发布一些代码行来生成类似于您的示例集的数据框,我很乐意为您提供解决方案。为此,您可以执行 df.head(10).to_json()。然后,将该 json 复制粘贴到一个名为 data 的变量中。然后你可以运行 pd.DataFrame(data=data)。只要 10 行在两个数据集中就足够了。

标签: python pandas for-loop timestamp


【解决方案1】:

您可以将searchsorted 用作df2.index 中第一个较高值的索引,例如df1.index 的第一个值。然后按iloc的位置选择第二个df2

#necessary both indices are sorted
df1 = df1.sort_index()
df2 = df2.sort_index()

a = df2.index.searchsorted(df1.index[0])
print (a)
2

df2 = df2.iloc[a:]
print (df2)
           Col1  ...  Col50
TimeStamp                  
10:37:40    223  ...    789

【讨论】:

  • 我以为 abt searchsorted 你来了
  • 非常感谢!这行得通,但由于某种原因,它也使 df 有两列 TimeStamp:\ 知道为什么吗?
  • TimeStamp 不是索引吗?
  • iloc 函数创建了新列?我以前从未见过它。 print (df2.info()) 是什么?
  • 也许只需要df2.index = pd.to_timedelta(df2.index)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-23
相关资源
最近更新 更多