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