группируйте данные, используя панд, но как мне сохранить порядок группы и выполнить математику для двух строк столбцов? - PullRequest
0 голосов
/ 16 ноября 2018

ДФ:

    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 row 1 = (X row1 - origin (известная)) 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, diff даст мне значения для расстояния между любыми двумя, но не общее расстояние для этой группы.

1 Ответ

0 голосов
/ 16 ноября 2018

Копирование 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...