【问题标题】:How to retreive all rows within of an excel file within in range of timestamp column from another excel如何从另一个excel中检索时间戳列范围内的excel文件中的所有行
【发布时间】:2021-11-27 23:57:16
【问题描述】:

我几天来一直在为这个 python 硬件分配而苦苦挣扎,最后我得到的只是超级混乱的代码,它不能按我需要的方式工作。因此,如果您能帮我提供一些指导或伪代码,那就太好了。

我有两个 Excel 文件。 excel1 有一列时间戳,格式为 yyyy-mm-dd HH:MM:SS 并且 excel2 有多个列,包括 yyyy-mm-dd HH:MM:SS.f 形式的时间戳 我需要在 excel2 中找到时间戳等于或在 excel 1 中的一个时间戳的 2 秒范围内的所有行,然后将整行(来自 excel2)放入一个新的 excel 文件中。

接下来,我需要在 excel2 中找到 column2=false 且时间戳不在 excel1 中的所有行。我需要它在它自己的新 excel 文件中或作为第一个创建的 excel 文件的第二张表。

这里有一些视觉效果

excel1

timestamp
2021-10-07 05:22:23
2021-10-07 07:25:54
2021-10-07 06:12:35
2021-10-07 05:23:58

excel2

timestamp                    isTrue      count
2021-10-07 05:22:23.4232     false       4
2021-10-07 07:25:53.2324     false       6
2021-10-07 01:13:34.2323     false       8
2021-10-07 02:24:58.2345     true        5

我的输出是:

newExcel Sheet One
timestamp                    isTrue      count
2021-10-07 05:22:23.4232     false       4
2021-10-07 07:25:53.2324     false       6

新Excel表格二

2021-10-07 01:13:34.2323     false       8

【问题讨论】:

  • 我分析你的问题。您想找到 excel1 分钟时间并从中减去 2 秒。让它成为min1。找到最大时间并添加 2 秒。让它成为max1。然后你对 excel2 时间进行排序并过滤掉这个 min1 和 max1 中的所有那些并写入一个文件。然后你做第二个过滤器,所有那些在 min1 和 max1 之外的 excel2 并且是 false ?正确吗?
  • 是的,没错。我将如何进行过滤?
  • 我需要为 excel1 中的每个时间戳设置一个最大值和最小值,然后我必须在 excel2 中找到一个介于最大值和最小值之间的时间戳。
  • 请在下面查看我的答案。如果它回答了您发布的问题,请检查“勾选”标记以接受答案。谢谢。
  • 你应该包含一些你自己的代码。

标签: python excel pandas openpyxl


【解决方案1】:

代码:

t = df['timestamp'].to_numpy().reshape(len(df),1)
t
t1 = df1['timestamp'].to_numpy()
t1
min1 = t - pd.Timedelta(seconds=2)
max1 = t + pd.Timedelta(seconds=2)
min1
max1

输出:

array([['2021-10-07T05:22:23.000000000'],
       ['2021-10-07T07:25:54.000000000'],
       ['2021-10-07T06:12:35.000000000'],
       ['2021-10-07T05:23:58.000000000']], dtype='datetime64[ns]')
array(['2021-10-07T05:22:23.423200000', '2021-10-07T07:25:53.232400000',
       '2021-10-07T01:13:34.232300000', '2021-10-07T02:24:58.234500000'],
      dtype='datetime64[ns]')
array([['2021-10-07T05:22:21.000000000'],
       ['2021-10-07T07:25:52.000000000'],
       ['2021-10-07T06:12:33.000000000'],
       ['2021-10-07T05:23:56.000000000']], dtype='datetime64[ns]')
array([['2021-10-07T05:22:25.000000000'],
       ['2021-10-07T07:25:56.000000000'],
       ['2021-10-07T06:12:37.000000000'],
       ['2021-10-07T05:24:00.000000000']], dtype='datetime64[ns]')

代码:

a = (t1 > min1)
a
b = (t1 < max1)
b
c = (a & b).any(axis=1)
c

输出:

array([[ True,  True, False, False],
       [False,  True, False, False],
       [False,  True, False, False],
       [False,  True, False, False]])
array([[ True, False,  True,  True],
       [ True,  True,  True,  True],
       [ True, False,  True,  True],
       [ True, False,  True,  True]])
array([ True,  True, False, False])

代码:

df1[c.T]
df1[(~c.T) & (df1['isTrue']==False)]

输出:

【讨论】:

    猜你喜欢
    • 2017-12-23
    • 1970-01-01
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多