我在csv文件中有以下数据集:
vehicle---time-----aspd[m/s]------gspd[m/s]----hdg---alt[m-msl]
veh_1---17:19.5---0.163471505---0.140000001---213---273.8900146
veh_2---17:19.5---0.505786836---0.170000002---214---273.9100037
veh_3---17:19.8---0.173484877---0.109999999---213---273.980011
veh_4---44:12.4---18.64673424---19.22999954---316---388.9299927
veh_5---44:13.0---18.13533401---19.10000038---316---389.1700134
我正在尝试使用两个输入(数据帧,车辆名称)编写函数launch_time(),该输入在第一次报告gspd超过10.0 m / s时返回。 输出时间必须从字符串(HH:MM:SS.SS)转换为12:00格式后的分钟。
看起来应该是这样的:
>>> launch_time(df, veh_1)
30.0
我将使用此函数迭代每个车辆,然后需要以启动顺序顺序将结果记录到具有格式(v_name,启动时间)的元组列表中。
看起来应该是这样的:
'veh_1', 30.0, 'veh_2', 15.0
披露:我的python / pandas知识非常入门级。
答案 0 :(得分:0)
您可以将[{3}}与分隔符-{3,}
一起使用 - 使用3个及更多-
读取csv:
import pandas as pd
from pandas.compat import StringIO
temp=u"""vehicle---time-----aspd[m/s]------gspd[m/s]----hdg---alt[m-msl]
veh_1---17:19.5---0.163471505---0.140000001---213---273.8900146
veh_2---17:19.5---0.505786836---0.170000002---214---273.9100037
veh_3---17:19.8---0.173484877---0.109999999---213---273.980011
veh_4---44:12.4---18.64673424---19.22999954---316---388.9299927
veh_5---45:13.0---18.13533401---19.10000038---316---389.1700134"""
#after testing replace StringIO(temp) to filename
df = pd.read_csv(StringIO(temp), sep="-{3,}", engine='python')
print (df)
vehicle time aspd[m/s] gspd[m/s] hdg alt[m-msl]
0 veh_1 17:19.5 0.163472 0.14 213 273.890015
1 veh_2 17:19.5 0.505787 0.17 214 273.910004
2 veh_3 17:19.8 0.173485 0.11 213 273.980011
3 veh_4 44:12.4 18.646734 19.23 316 388.929993
4 veh_5 45:13.0 18.135334 19.10 316 389.170013
然后转换列time
read_csv
,按to_timedelta
,boolean indexing
过滤10m/s
以上的所有行,使用sort_values
对车辆进行分组,然后得到groupby
和最后zip
列vehicle
和time
并转换为list
:
df.time = pd.to_timedelta('00:' + df.time, unit='h').\
astype('timedelta64[m]').astype(int)
req = df[df['gspd[m/s]'] > 10].\
sort_values('time', ascending=True).\
groupby('vehicle', as_index=False).head(1)
print(req)
vehicle time aspd[m/s] gspd[m/s] hdg alt[m-msl]
4 veh_5 45 18.135334 19.10 316 389.170013
3 veh_4 44 18.646734 19.23 316 388.929993
L = list(zip(req['vehicle'],req['time']))
print (L)
[('veh_5', 45), ('veh_4', 44)]