Как получить самую старую часть установки последовательных установок в той же лодке, где столбец X является ложным? - PullRequest
1 голос
/ 07 октября 2019

У меня есть хороший алгоритм, который возвращает самую старую часть установки последовательных установок в одной лодке: Как получить самую старую часть установки последовательных установок одной и той же лодки в пандах?

Iхотел бы применять этот алгоритм только к строкам, которые имеют col['x'] == False. Как я могу это сделать? См. Ожидаемый результат ниже.

Алгоритм: print (df[['boat','part']].ne(df[['boat','part']].shift()).any(axis=1))

Вход

| boat | part | date           | x     |
|------|------|----------------|-------|
| A    | B    | 12/19/13 08:19 | TRUE  |<-- ignore and keep this
| A    | C    | 3/24/14 10:26  | TRUE  |<-- ignore and keep this
| A    | D    | 7/21/14 09:46  | TRUE  |<-- ignore and keep this
| A    | D    | 3/5/18 22:35   | FALSE |<--evaluate this with algorithm
| A    | D    | 7/27/19 00:43  | FALSE |<--evaluate this with algorithm
| A    | D    | 8/9/19 00:53   | FALSE |<--evaluate this with algorithm
| A    | D    | 9/6/19 23:10   | FALSE |<--evaluate this with algorithm

Ожидаемый результат

| boat | part | date           | x     |
|------|------|----------------|-------|
| A    | B    | 12/19/13 08:19 | TRUE  |<-- keep because x == True
| A    | C    | 3/24/14 10:26  | TRUE  |<-- keep because x == True
| A    | D    | 7/21/14 09:46  | TRUE  |<-- keep because x == True
| A    | D    | 3/5/18 22:35   | FALSE |<-- Keep because first install of consecutive installs

Вход 2

| boat | part | date             | x     |
|------|------|------------------|-------|
| A    | E    | 12/20/13   03:27 | TRUE  |<-- ignore and keep this
| B    | E    | 7/21/14   09:46  | FALSE |<--evaluate this with algorithm
| C    | E    | 1/8/16   17:08   | TRUE  |<-- ignore and keep this
| C    | E    | 3/23/16   17:15  | TRUE  |<-- ignore and keep this
| B    | E    | 3/5/18   22:35   | FALSE |<--evaluate this with algorithm
| B    | E    | 7/27/19   00:43  | FALSE |<--evaluate this with algorithm
| B    | E    | 8/9/19   00:53   | FALSE |<--evaluate this with algorithm
| B    | E    | 9/6/19   23:10   | FALSE |<--evaluate this with algorithm

Ожидаемый выход 2

| boat | part | date             | x     |
|------|------|------------------|-------|
| A    | E    | 12/20/13   03:27 | TRUE  |<-- keep because x == True
| B    | E    | 7/21/14   09:46  | FALSE |<-- Keep because first install of consecutive installs
| C    | E    | 1/8/16   17:08   | TRUE  |<-- keep because x == True
| C    | E    | 3/23/16   17:15  | TRUE  |<-- keep because x == True
| B    | E    | 3/5/18   22:35   | FALSE |<-- Keep because first install of consecutive installs

1 Ответ

1 голос
/ 07 октября 2019

Одной из идей является создание нового вспомогательного столбца, заполненного уникальными значениями, если True s с DataFrame.assign и Index.where, и обработка всех 3 столбцов:

df1 = df.assign(tmp = df.index.where(df['x'], -1))[['boat','part','tmp']]
df = df[df1.ne(df1.shift()).any(axis=1)]
print (df)
  boat part            date      x
0    A    E  12/20/13 03:27   True
1    C    E    1/8/16 17:08   True
2    C    E   3/23/16 17:15   True
3    B    E    3/5/18 22:35  False

А на секунду:

df1 = df.assign(tmp = df.index.where(df['x'], -1))[['boat','part','tmp']]
df = df[df1.ne(df1.shift()).any(axis=1)]
print (df)
  boat part            date      x
0    A    E  12/20/13 03:27   True
1    B    E   7/21/14 09:46  False
2    C    E    1/8/16 17:08   True
3    C    E   3/23/16 17:15   True
4    B    E    3/5/18 22:35  False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...