Вычтите значения повторяющихся строк панд - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть следующий фрейм данных:

Date         Code     Name             Days
23/09/2019   WO       Smith Thomas     1
23/09/2019   RE       Johnson Robert   1
24/09/2019   WO       Smith Thomas     1
24/09/2019   NW       Smith Thomas     0.5
25/09/2019   OP       Johnson Robert   0.5
25/09/2019   GF       Johnson Robert   0.5

В случае дубликатов, основанных на столбцах Дата и Имя, я хотел бы проверить, равна ли сумма дней> 1. Если да, то я бы хотелподставить наибольшее значение с другой, но не удалять строки, иначе ничего не делать.

Желаемый результат будет:

Date         Code     Name             Days
23/09/2019   WO       Smith Thomas     1
23/09/2019   RE       Johnson Robert   1
24/09/2019   WO       Smith Thomas     0.5
24/09/2019   NW       Smith Thomas     0.5
25/09/2019   OP       Johnson Robert   0.5
25/09/2019   GF       Johnson Robert   0.5

Есть ли какой-нибудь способ Панды сделать это?

Я мог бы зацикливаться с использованием Python, но это не кажется эффективным

Спасибо

1 Ответ

1 голос
/ 23 сентября 2019

без дополнительной информации о том, какую числовую операцию вы хотите выполнить, единственный способ получить желаемый результат заключается в следующем:

df.Days = df.groupby(['Date', 'Name']).Days.transform(
    lambda x: x if len(x) == 1 else 
    [max(i - min(x), min(x)) if sum(x) > 1 else i for i in x])

Причина этого:

  1. сгруппировать все строки на Date, Name основе
  2. , посмотреть на столбец Days и проверить, есть ли дубликаты
  3. Если это так, то вычесть всезначения наименьшее и продолжайте принимать максимум между результатом вычитания наименьшего значения в списке (это дешевый способ предотвратить вычитание самого низкого на себя)
    Date    Code    Name    Days
0   23/09/2019  WO  Smith Thomas    1.0
1   23/09/2019  RE  Johnson Robert  1.0
2   24/09/2019  WO  Smith Thomas    0.5
3   24/09/2019  NW  Smith Thomas    0.5
4   25/09/2019  OP  Johnson Robert  0.5
5   25/09/2019  GF  Johnson Robert  0.5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...