Python 标记数据帧的行
我想根据以下条件向我的数据帧添加一个新属性“LabelId”:给定输入数据帧DF,找到kPython 标记数据帧的行,python,pandas,dataframe,Python,Pandas,Dataframe,我想根据以下条件向我的数据帧添加一个新属性“LabelId”:给定输入数据帧DF,找到knlargest(k,velocity),对于每个值,我想通过应用apply(lambda x:x-np.timedelta64(50,'ms'))和apply来添加和替换一些ms,例如50(lambda x:x+np.timedelta64(50,'ms'))并将新属性LabelId设置为1,否则设置为0 输入DF:考虑速度列的2个最大值,并添加50 ms eventTime,
nlargest(k,velocity)
,对于每个值,我想通过应用apply(lambda x:x-np.timedelta64(50,'ms'))和apply来添加和替换一些ms,例如50(lambda x:x+np.timedelta64(50,'ms'))
并将新属性LabelId
设置为1,否则设置为0
输入DF:考虑速度列的2个最大值,并添加50 ms
eventTime, velocity
1, 2017-08-19T12:53:55:050, 3
2, 2017-08-19T12:53:55:100, 4
3, 2017-08-19T12:53:55:150, 180
4, 2017-08-19T12:53:55:200, 2
5, 2017-08-19T12:53:55:250, 5
6, 2017-08-19T12:53:55:050, 3
7, 2017-08-19T12:53:55:100, 4
8, 2017-08-19T12:53:55:150, 70
9, 2017-08-19T12:53:55:200, 2
10, 2017-08-19T12:53:55:250, 5
输出DF:
eventTime, velocity, LabelId
1, 2017-08-19T12:53:55:050, 3, 0
2, 2017-08-19T12:53:55:100, 4, 1
3, 2017-08-19T12:53:55:150, 180, 1
4, 2017-08-19T12:53:55:200, 2, 1
5, 2017-08-19T12:53:55:250, 5, 0
6, 2017-08-19T12:53:55:050, 3, 0
7, 2017-08-19T12:53:55:100, 4, 1
8, 2017-08-19T12:53:55:150, 70, 1
9, 2017-08-19T12:53:55:200, 2, 1
10, 2017-08-19T12:53:55:250, 5, 0
我一直在使用上述函数,但没有得到正确的结果。
如果您有任何建议,我们将不胜感激。
非常感谢,,
顺致敬意,
Carlo您需要topeventTime
by,然后添加Timedelta
并获得最大和最小时间戳。最后创建掩码by,它被转换为整数0
和1
:
df['eventTime'] = pd.to_datetime(df['eventTime'], format='%Y-%m-%dT%H:%M:%S:%f')
a = df.nlargest(2, 'velocity')['eventTime']
low = min(a) - pd.Timedelta(50, unit='ms')
high = max(a) + pd.Timedelta(50, unit='ms')
#low 2017-08-19 12:53:55.100
#high 2017-08-19 12:53:55.200
df['LabelId'] = df['eventTime'].between(low,high).astype(int)
print (df)
返回
eventTime velocity LabelId
1 2017-08-19 12:53:55.050 3 0
2 2017-08-19 12:53:55.100 4 1
3 2017-08-19 12:53:55.150 180 1
4 2017-08-19 12:53:55.200 2 1
5 2017-08-19 12:53:55.250 5 0
6 2017-08-19 12:53:55.050 3 0
7 2017-08-19 12:53:55.100 4 1
8 2017-08-19 12:53:55.150 70 1
9 2017-08-19 12:53:55.200 2 1
10 2017-08-19 12:53:55.250 5 0
你能更人性化地描述一下LabelId的含义吗?1
是什么意思?在那一列中0
是什么意思?好的,当然。0表示“写”,而“1”表示“读”。但我不清楚这对解决方案有何影响。谢谢Jezrael。有一个问题:nlargest中使用的数字2与a1和a2之间有任何关系吗?如果我在nlargest中使用10,我应该更改什么吗?原因是当应用df['LabelId']=df['eventTime']时,我只得到0。isin(a)。astype(int)@carloalloca-我想你需要最大值和最小值之间的所有值,带有顶部时间戳,+-50ms
?我编辑答案。我正在努力获得正确的数据结果。基本上,我只在最小值和最大值之间得到1,而不是在上面显示的每个部分。我使用的是a=df.nlargest(15,'velocity')['eventTime']@Carloalloca-存在获取低值
和高值
的问题?问题是DF仅在低值和高值之间被标记为1。只有一个部分s(从低到高)。我预计有15个部分。