我有一个数据集,代表不同位置的重复事件。
df = [Datetime location time event]
每个位置可以有8-10个重复的事件。我要做的是建立一些信息,说明两个事件之间有多长时间。 (他们可能不是同一个事件)
我可以通过将df拆分为sub-dfs并单独处理每个位置来实现。但似乎groupby应该更聪明。这也假设我知道所有可能因文件而异的位置。
df1 = df[(df['location'] == "Loc A")]
df1['delta'] = df1['time'] - df1['time'].shift(1)
df2 = df[(df['location'] == "Loc B")]
df2['delta'] = df2['time'] - df2['time'].shift(1)
...
...
我想做的是基于位置的groupBy ......
dfg = df.groupby(['location'])
然后为每个分组位置
添加增量列
移位和减法以获得事件之间的增量时间
问题:
groupby是否维持事件的顺序?
在DF上运行的for循环会更好吗?这似乎不是很像python。
一旦你有一个分组的df,有一种方法可以将它转换回一般的数据帧。我认为我不需要这样做,但认为将来可能会有所帮助。
感谢您提供的任何支持。
答案 0 :(得分:0)
http://pandas.pydata.org/pandas-docs/dev/groupby.html看起来提供了您所需要的内容。
groups = df.groupby('location').groups
或
for name, group in df.groupby('location')
// do stuff here
将其拆分为位组列中具有匹配值的行组。
然后,您可以根据时间值对组进行排序,并迭代以创建增量。
答案 1 :(得分:0)
当您分组并确定要对数据执行操作的列时,系统会返回一个函数,然后可以应用该函数。
deltaTime = lambda x: (x - x.shift(1))
df['delta'] = df.groupby('location')['time'].apply(deltaTime)
按位置分组并返回每个组的时间列 然后将每个子系列传递给函数deltaTime。