[英]Pandas: Mean of columns over timespan after a conditon change in other column
(这与Pandas 相关:第二列中条件变化之间的列的平均值)
假设我有以下 dataframe:
import pandas as pd
import numpy as np
data = np.random.randint(1, 10, size=(10,2))
df = pd.DataFrame(data, columns=['x1', 'x2'])
df['switch'] = [1,1,0,0,1,1,0,0,1,1]
index_ = pd.date_range('2022-01-17 13:00:00', periods=10, freq='5s')
df.index = index_.rename('Time')
导致:
x1 x2 switch
Time
2022-01-17 13:00:00 2 6 1
2022-01-17 13:00:05 9 8 1
2022-01-17 13:00:10 4 9 0
2022-01-17 13:00:15 5 6 0
2022-01-17 13:00:20 4 9 1
2022-01-17 13:00:25 6 7 1
2022-01-17 13:00:30 4 6 0
2022-01-17 13:00:35 2 3 0
2022-01-17 13:00:40 4 9 1
2022-01-17 13:00:45 5 2 1
我正在寻找一种方法,根据结束时间,为开关值为 1 的每个块获取 x1 和 x2 的方法。开关值从 1 变为 0 后,x1 和 x2 的方法应该是计算前 5 秒,并将这些值最好放在新的 dataframe 中,返回如下内容:
开始时间:2022-01-17 13:00:00
结束:2022-01-17 13:00:05
x1 均值:5.5
x2 均值:7
如果我正确理解你的问题,你可以简单地使用 function 如下所示:
def getTmean(fTime, lTime, df):
if "Time" not in df.columns:
df.reset_index(inplace=True)
if "Time" not in df.columns:
raise ValueError("No time index in dataframe")
df["Time"] = pd.to_datetime(df["Time"])
dfSelected = df[(df["Time"] >= fTime) & (df["Time"] <= lTime) & (df["switch"] == 1)]
return (dfSelected["x1"].mean(), dfSelected["x2"].mean())
getTmean("2022-01-17 13:00:00", "2022-01-17 13:00:05", df)
在您的情况下,它会导致:
(5.5, 7.0)
function getTmean()
得到三个 arguments:
fTime
,这是字符串中的开始时间lTime
,这是字符串中的结束时间df
,即 dataframe 请注意,dataframe 至少应该有一个名为Time
的列,其中包含日期值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.