我正在尝试使用 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))
所以我需要做的是检查每个组的时间值在 2 秒内发生,选择 Coef 值最高的组并丢弃其余的。所以在这个例子中,我会以某种方式将索引 0 和 1 组合在一起并丢弃索引 0 (因为 df.Coef[0] 1 ).
同样,索引 5,6 和 7 将被分组在一起,并且除了索引 6 之外的所有索引都会被丢弃。所以所需的输出将是 df.drop([0,5,7]):
我目前有一个 python while 循环算法来执行此操作,但数据帧可以包含数百万个索引,因此速度太慢。任何纯熊猫解决方案将不胜感激
您可以在这里通过枚举组来进行分组:
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)