我想基于以下条件向我的数据帧添加一个新属性“LabelId”:给定输入数据帧DF,找到k nlargest(k, velocity)
,并且对于我想要添加的每个值,并且取代某些ms,例如50应用apply(lambda x: x - np.timedelta64( 50, 'ms' ) )
和apply(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
我一直在使用上述功能,但我没有得到正确的结果。 请,任何建议将非常感谢。 非常感谢, 最好的祝福, 卡罗
答案 0 :(得分:1)
您需要按nlargest
排名eventTime
,然后添加Timedelta
并获取最大和最小时间戳。最后按between
创建掩码,将其转换为整数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