df:
Time Name X Y
0 00 AA 0 0
1 30 BB 1 1
2 45 CC 2 2
3 60 GG:AB 3 3
4 90 GG:AC 4 4
5 120 AA 5 3
dataGroup = df.groupby
([pd.Grouper(key=Time,freq='30s'),'Name'])).sort_values(by=['Timestamp'],ascending=True)
我尝试在行上执行diff(),但它返回的是NaN或不期望的内容。
df.groupby('Name', sort=False)['X'].diff()
如何保持分组和时间排序,以及如何区分行和上一行(对于X和Y列)
预期输出: XDiff是AA组, XDiff第1行=(X第1行-原点(已知)) XDiff第2行=(X第2行-X第1行)
Time Name X Y XDiff YDiff
0 00 AA 0 0 0 0
5 120 AA 5 3 5 3
1 30 BB 1 1 0 0
6 55 BB 2 3 1 2
2 45 CC 2 2 0 0
3 60 GG:AB 3 3 0 0
4 90 GG:AC 4 4 0 0
很高兴看到每一组的总距离(即AA为5,BB为1) 在我的示例中,每个组只有几行,但是如果有100行,该差异将为我提供任意两个行之间的距离值,而不是该组的总距离值。
答案 0 :(得分:0)
剥离https://stackoverflow.com/a/20664760/6672746,您可以使用lambda
函数来计算X
和Y
的行之间的差。我还包括了两行来设置索引(在groupby
之后)并对其进行排序。
df['x_diff'] = df.groupby(['Name'])['X'].transform(lambda x: x.diff()).fillna(0)
df['y_diff'] = df.groupby(['Name'])['Y'].transform(lambda x: x.diff()).fillna(0)
df.set_index(["Name", "Time"], inplace=True)
df.sort_index(level=["Name", "Time"], inplace=True)
输出:
X Y x_diff y_diff
Name Time
AA 0 0 0 0.0 0.0
120 5 3 5.0 3.0
BB 30 1 1 0.0 0.0
CC 45 2 2 0.0 0.0
GG:AB 60 3 3 0.0 0.0
GG:AC 90 4 4 0.0 0.0