Python 标记数据帧的行

Python 标记数据帧的行,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,

我想根据以下条件向我的数据帧添加一个新属性“LabelId”:给定输入数据帧DF,找到k
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

您需要top
eventTime
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个部分。