【问题标题】:How to average 2D array columns based on date header如何根据日期标题平均二维数组列
【发布时间】:2025-12-16 19:25:02
【问题描述】:

我正在处理一些由约 1,000 行乘 700 列组成的冰川钻孔温度数据。垂直索引是深度(即随着您向下移动数组深度增加),列标题是日期时间值(即当您沿着数组向右移动时,您会及时向前移动)。

我正在寻找一种方法来根据日期采样率平均列中的所有温度。例如,较早的日期时间间隔为 10 分钟,但较晚的日期时间间隔为 6 小时。

能够将采样作为输入并根据该采样率获取数据会很好,这样我就可以看到哪个效果最好。

如果我选择说 3 小时采样,这也会很好地忽略超过 3 小时的间隔,并且在这种情况下不会对数据进行任何更改(即平均 10 分钟的日期时间间隔,但日期时间间隔6 小时不受影响)。

所有这些都需要在以日期作为列标题和深度作为索引的 pandas 数据帧中出现,或者作为 numpy 数组和单独的日期时间列表出现。

我对 Python 还很陌生,这是我关于 * 的第一个问题!谢谢:)

(我知道以下对 Pandas 的使用并不完全正确,但它适用于我制作的图形滑块!)

import numpy as np
import pandas as pd

#example array
T = np.array([  [-2, -2, -2, -2.1, -2.3, -2.6],
                [-2.2, -2.3, -3, -3.1, -3.3, -3.3],
                [-4, -4, -4.5, -4.4, -4.6, -4.5]])

#example headers at 8 and then 4 hour spacing
headers = [pd.date_range(start='2018-04-24 00:00:00', end='2018-04-24 08:00:00', periods=3).tolist() +
            pd.date_range(start='2018-04-24 12:00:00', end='2018-04-25 12:00:00', periods=3).tolist()]

#pandas dataframe in same setup as much larger one I'm using
T_df = pd.DataFrame(T, columns = headers)

【问题讨论】:

    标签: python pandas numpy


    【解决方案1】:

    您可以使用的一个技巧是将时间序列转换为数字序列,然后使用 groupby 方法。

    例如,假设你有

    df = pd.DataFrame([['10:00:00', 1.],['10:10:00', 2.],['10:20:00', 3.],['10:30:00', 4.]],columns=['Time', 'Value'])
    df.Time = pd.to_datetime(df.Time, format='%X')
    

    您可以通过以下方式转换您的时间序列:

    df['DeltaT'] = pd.to_timedelta(df.Time).dt.total_seconds().astype(int) 
    df['DeltaT'] -= df['DeltaT'][0] # To start to 0
    

    然后使用 groupby 方法。例如,您可以创建一个新列来确定您想要的时间间隔:

    myInterval = 1200.
    df['group'] = (df['DeltaT']/myInterval).astype(int)
    

    所以你可以使用 groupby 后跟 mean() (或你定义的函数)

    df.groupby('group').mean()
    

    希望这会有所帮助!

    【讨论】:

    • 嗨 Nicolas,感谢您的提示!我的 pandas 数组的设置略有不同,但我正在尝试使用这个答案的 detla time 方面
    • 很高兴我能帮上忙!不要犹豫,浏览 groupby pandas 文档,因为它包含许多有用的应用程序