繁体   English   中英

如何有效处理熊猫中的时间序列数据

[英]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,它效率不高且无法正常工作:我尝试对数据进行排序的每种方式都会导致问题。

  • 我无法按MAC以及日期和时间对其进行排序,因为我需要保留行进方向(按日期和时间进行排序会导致所有方向看起来都朝着正方向)。
  • 仅通过MAC排序就可以使节点保持顺序(因为它们按节点顺序被推送到文件中)

虽然我可以弄清排序问题,但更大的问题是我是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM