[英]How to Efficiently Process Time-Series Data in Pandas
我有代表给定节点经过的时间的数据集。 数据以以下格式存储在每个节点的一个CSV文件中: node name, datetime, irrelevant field, mac address
我正在将它们读入Pandas中的一个DataFrame中:
dfs = [pd.read_csv(f, names=CSV_COLUMNS, parse_dates=[1]) for f in files]
return pd.concat(dfs)
我想做的是找到一个节点与另一个节点上的MAC地址出现之间的时间差。 现在,我正在遍历生成的DataFrame,它效率不高且无法正常工作:我尝试对数据进行排序的每种方式都会导致问题。
虽然我可以弄清排序问题,但更大的问题是我是Pandas的新手,我敢打赌,在Pandas中有正确的方法可以做到这一点。 在处理结束时,我想要的是一个数据集,该数据集显示了MAC 直接在其之间行进的每对节点的行进时间( timediff.total_seconds()
或类似数据)。 最后一点很重要:对于节点为A,B和C的布局,大多数行程将为AB或BC(或相反),但是某些MAC可能不会在B处注册,而是会从A变为C在某些节点上出现MAC但从不出现在另一个节点上的孤儿也可能是孤儿。
如果数据框按日期时间对每个mac address
排序,则可以执行以下操作:
grb = df.groupby('mac address')
df['origin'] = grb['node name'].transform(pd.Series.shift, 1)
df['departure time'] = grb['datetime'].transform(pd.Series.shift, 1)
旅行时间为:
df['travel time'] = df['departure time'] - df['datetime']
如果节点名称为字符串,则路径为:
df['path'] = df['origin'] + '-' + df['node name']
编辑 :假设旅行时间不能为负,这可能会更快:
df.sort(['mac address', 'datetime'], inplace=True)
df['origin'] = df['node name'].shift(1)
df['departure time'] = df['datetime'].shift(1)
# correct for the places where the mac addresses change
idx = df['mac address'] != df['mac address'].shift(1)
df.loc[idx, 'origin'] = np.nan
df.loc[idx, 'departure time'] = np.nan
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.