所以我的 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/