首页 > 解决方案 > 如何在具有相同值的其他列上添加新功能

问题描述

我们如何在 A 列和时间序列的基础上添加一个新的“新功能”列。

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

Timeseries(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

标签: pandas

解决方案


采用:

#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

推荐阅读