gpt4 book ai didi

python - Pandas 根据差异列形成集群

转载 作者:行者123 更新时间:2023-11-28 22:47:44 25 4
gpt4 key购买 nike

我正在尝试使用 Pandas 根据表示时间(以秒为单位)的列中的差异来消除数据框中的一些近似重复项。例如:

import pandas as pd, numpy as np
df=pd.DataFrame([1200,1201,1233,1555,1650,5561,5562],columns=['Time'])
df['Dif']=df.Time.diff()
df['Coef']=np.random.rand(len(df))

enter image description here

所以我需要做的是检查每个时间值在 2 秒内出现的组,选择 Coef 值最高的组并丢弃其余组。所以在这个例子中,我会以某种方式将索引 0 和 1 组合在一起并丢弃索引 0(因为 df.Coef[0] < df.Coef 1 )。

同样,索引 5、6 和 7 将被组合在一起,除索引 6 外的所有索引都将被丢弃。所以所需的输出将是 df.drop([0,5,7]):

enter image description here

我目前有一个 python while 循环算法来执行此操作,但数据框可能包含数百万个索引,因此它太慢了。任何纯 Pandas 解决方案将不胜感激

最佳答案

你可以在这里做一个 groupby,通过枚举组:

In [11]: (df['Time'].diff() > 2).cumsum()
Out[11]:
0 0
1 0
2 1
3 2
4 3
5 4
6 4
Name: Time, dtype: int64

注意:如果这是一个日期时间列而不是 2,您需要与时间增量进行比较。

In [12]: g = df.groupby((df.Time.diff() > 2).cumsum())

现在您可以对每个组的 Coeff 列使用 idxmax(具有最大元素的索引):

In [13]: g.Coef.idxmax()
Out[13]:
Time
0 1
1 2
2 3
3 4
4 5
Name: Coef, dtype: int64

并选择这些行:

In [14]: df.loc[g.Coef.idxmax()]  # results will vary since we've used a random df
Out[14]:
Time Dif Coef
1 1201 1 0.760751
2 1233 32 0.501199
3 1555 322 0.473628
4 1650 95 0.371059
5 5561 3911 0.917556

关于python - Pandas 根据差异列形成集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25923587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com