我在熊猫中有一个类似这样的时间序列(按ID排序):
id time value
1 0 2
1 1 4
1 2 5
1 3 10
1 4 15
1 5 16
1 6 18
1 7 20
2 15 3
2 16 5
2 17 8
2 18 10
4 6 5
4 7 6
我希望每个组ID的下采样时间从1分钟降低到3分钟。 值是组的最大值(id和3分钟)。
输出应为:
id time value
1 0 5
1 1 16
1 2 20
2 0 8
2 1 10
4 0 6
我尝试循环需要很长时间。
有什么办法解决大型数据框的问题吗?
谢谢!
答案 0 :(得分:4)
您可以将Variable G:Set.
Inductive posfijo : list _ -> list _ -> Prop :=
| posfijoB : forall l: list _, posfijo l l
| posfijoI : forall (l1 l2: list _) (a : G), posfijo l1 l2 -> posfijo l1 (cons a l2).
Infix "<<" := (posfijo) (at level 70, right associativity).
Lemma Pref4_a : forall (X:Set)(l: list G)(x:G), ~ (cons x l << l).
Proof.
intros X l x H.
系列转换为实际的{% schema %}
{
"name": "Collection Mixed Products",
"settings": [
{
"type": "checkbox",
"id": "display_image_cat",
"label": "Display Image Category?",
"default": true
},
...
]
}
,然后将time
用于矢量化解决方案:
timedelta
resample
答案 1 :(得分:3)
将np.r_
和.iloc
与groupby
一起使用:
df.groupby('id')['value'].apply(lambda x: x.iloc[np.r_[2:len(x):3,-1]])
输出:
id
1 2 5
5 16
7 20
2 10 8
11 10
4 13 6
Name: value, dtype: int64
在列命名等方面走得更远。
df_out = df.groupby('id')['value']\
.apply(lambda x: x.iloc[np.r_[2:len(x):3,-1]]).reset_index()
df_out.assign(time=df_out.groupby('id').cumcount()).drop('level_1', axis=1)
输出:
id value time
0 1 5 0
1 1 16 1
2 1 20 2
3 2 8 0
4 2 10 1
5 4 6 0