Pandas 如何在具有相同值的其他列上添加新要素库

Pandas 如何在具有相同值的其他列上添加新要素库,pandas,Pandas,如何在列和时间序列的基础上添加“新功能”的新列 A列:数字5、8、9具有相同的值 时间序列(hh:mm:ms):115312、115313、115314具有几乎相同的值。(也许我们可以设置在3分钟的范围内) 新功能:这样他们可以放入一个组中,我们将其标记为“1”,其他人可以将其标记为“0” 在我的原始数据集中,A列中有成千上万个不同的值,有没有简单的方法来创建一个新特性,如下图所示 A TImeseries new feature 1 1314 121314 1

如何在列和时间序列的基础上添加“新功能”的新列

A列:数字5、8、9具有相同的值

时间序列(hh:mm:ms):115312、115313、115314具有几乎相同的值。(也许我们可以设置在3分钟的范围内)

新功能:这样他们可以放入一个组中,我们将其标记为“1”,其他人可以将其标记为“0”

在我的原始数据集中,A列中有成千上万个不同的值,有没有简单的方法来创建一个新特性,如下图所示

      A  TImeseries new feature
1   1314    121314     1
2   2245    121415     1
3   1362    122241     0
4   3655    122512     0
5   4444    115312     1
6   1314    121414     1
7   2245    121515     1
8   4444    115313     1
9   4444    115314     1
10  2245    121615     1
使用:

#3分钟阈值
N=pd.Timedelta(3*60,单位=s')
#将时间转换为时间增量
s=df['TImeseries'].astype(str).str.replace('(\d{2})(\d{2})(\d{2})'(r'\1:\2:\3')
df['TImeseries']=pd.到_timedelta(s)
#按两列排序
df=df.sort_值(['A','TImeseries'])
#获取各组的差异并按阈值进行比较
m1=df.groupby('A')['TImeseries'].diff().fillna(pd.Timedelta(0))
#3 minutes threshold
N = pd.Timedelta(3 * 60, unit='s')
#convert times to timedeltas
s = df['TImeseries'].astype(str).str.replace('(\d{2})(\d{2})(\d{2})', r'\1:\2:\3')
df['TImeseries'] = pd.to_timedelta(s)
#sorting by both columns
df = df.sort_values(['A','TImeseries'])

#get difference per groups and compare by threshold
m1 = df.groupby('A')['TImeseries'].diff().fillna(pd.Timedelta(0)) < N
#get duplicates by A column
m2 = df['A'].duplicated(keep=False)

#chain by bitwise AND and convert to integers
df['new'] = (m1 & m2).view('i1')
#get default ordering of index
df = df.sort_index()
print (df)
       A TImeseries  new feature  new
1   1314   12:13:14            1    1
2   2245   12:14:15            1    1
3   1362   12:22:41            0    0
4   3655   12:25:12            0    0
5   4444   11:53:12            1    1
6   1314   12:14:14            1    1
7   2245   12:15:15            1    1
8   4444   11:53:13            1    1
9   4444   11:53:14            1    1
10  2245   12:16:15            1    1