python - Python/Pandas:一旦满足区间条件,就使用多个函数变量(列)进行聚合
问题描述
我有一个带有段、时间戳和不同列的 DataFrame
Segment Timestamp Value1 Value2 Value2_mean
0 2018-11... 180 156 135
0 170 140 135
0 135
1
1
...
我想将此 DataFrame 与“Segment”聚合/分组,并在满足此间隔条件后立即获取该段的第一个时间戳,然后获取该段的时间间隔(以秒为单位)。因为函数有更多的值,所以我认为聚合不起作用。
value2_mean-std(value2) <= value1 <= value2_mean+std(value2)
它应该如下所示:
Segment Intervall[s]
0 10
1 19
2 6
3 ...
我试过这样的事情:
grouped = dataSeg.groupby(['Segment'])
def grouping(df)
a = np.array(df['Value_1'])
b = np.array(df['Value2'])
c = np.array(df['Value2_mean'])
d = np.array(df['Timestamp'])
for x in a:
categories = np.logical_and(
(c-np.std(b)<= x),
(c+np.std(b)>= x))
if np.any(categories):
return d[categories]-d[0]
grouped.apply(grouping)
这不像我想要的那样工作。任何建议,将不胜感激!
解决方案
像这样的东西?我没有彻底测试它。
def calc(grp):
if grp.Value1.sub(grp.Value2_mean).abs().lt(grp.Value2.std()).any():
return grp["Timestamp"].iloc[-1] - grp["Timestamp"].iloc[0]
return np.nan
df.groupby("Segment").apply(calc)