python-3.x - 如何在索引为时间戳的每个小时找到多个斜率?

标签 python-3.x pandas group-by regression

所以我的 df 是传感器每分钟的读数。我想找到每小时读数的斜率,这意味着每 1 小时应该有 1 个斜率值。我该怎么做?

我试过 groupby.apply linregress ,但没有用,也试过 groupby 60 行,但这只是给出了小时的平均值。第 1 列是 T_a,第 2 列是 Q_a。 我想要每小时 T_am 与 Q_a 的斜率值。

df.head()
2019-01-09 17:03:00   3.09125   93.353877
2019-01-09 17:04:00   3.08575   89.513643
2019-01-09 17:05:00   3.10325   92.700350
2019-01-09 17:06:00   3.08075   91.089470
2019-01-09 17:07:00   3.08200   92.563898

df = df.groupby(index).apply(lambda df: linregress(df.T_am, df.Q_a)[0])

KeyError: Timestamp('2019-01-09 18:02:00')

最佳答案

您需要在索引时间groupby,如果您只有一天的测量值,这应该可行:

df.groupby(index.hour).apply(lambda df: linregress(df.T_am, df.Q_a)[0])

如果您有多天,我会首先创建一个列,其中包含四舍五入到小时的索引,然后根据该索引进行分组:

df['index_hour']=df.index.floor('h')
df.groupby('index_hour').apply(lambda df: linregress(df.T_am, df.Q_a)[0])

如果您想从线性回归中保留几个参数,您可以使用以下脚本:

def extract_lr(x):
    lr = linregress(x['T_am'], x['Q_a'])
    return pd.Series([lr.slope, lr.intercept, lr.rvalue, lr.pvalue],
                     index=['slope', 'intercept', 'rvalue','pvalue'])

df.groupby('index_hour').apply(lambda x: extract_lr(x))

归功于 this answer .

关于python-3.x - 如何在索引为时间戳的每个小时找到多个斜率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58537540/

相关文章:

mysql 对单个表中的多组数据求和

mysql - 在 MySQL 中将 2 和 2 值组合在一起

python - cx-Freeze 可执行文件无法在另一台计算机上运行

python - 如何根据集团内的实体找到最大金额?

python - 如何附加索引

Mysql - "group by group_concat()"的可能解决方案?

python - 两个数据帧上列函数的高效 pandas 操作

Python/PyQt/Qt QMenu QAction 语法

python - `print()`是怎么工作的?

python - Pandas 数据框到嵌套计数器字典