[FIXED] Hinzufügen einer Spalte zu DataFrame mit Schwellenwert für die Differenz zwischen dem Datendatum in einer Spalte und der vorhergehenden Spalte

Ausgabe

Seien Sie der folgende Python-Pandas-DataFrame:

| num_ID | start_date  | end_date   | other_column      |
| ------ | ----------- | ---------- | ----------------- |
| 1      | 2022-02-14  | 2022-02-15 | 09:23:00          |
| 1      | 2022-02-20  | 2022-02-25 | 12:10:01          |
| 2      | 2022-03-11  | 2022-03-21 | 08:21:00          |
| 2      | 2022-03-22  | 2022-03-27 | 02:36:00          |
| 2      | 2022-04-10  | 2022-04-15 | 11:43:03          |
| 3      | 2022-02-04  | 2022-02-06 | 16:51:00          |
| 3      | 2022-02-14  | 2022-02-23 | 19:35:10          |
| 4      | 2022-02-28  | 2022-10-12 | 00:01:00          |

Für jeden num_IDWert möchte ich eine neue Spalte total_timesmit dem Wert 1 hinzufügen, wenn der end_dateWert der vorherigen Zeile und der start_dateWert der aktuellen Zeile mindestens 7 Tage auseinander liegen.

Fügen Sie zuerst den Wert 0 für diese Spalte für die erste Zeile jedes num_IDWerts hinzu, da sie keine vorherige Zeile haben.

| num_ID | start_date  | end_date   | other_column      | total_times |
| ------ | ----------- | ---------- | ----------------- | ----------- |
| 1      | 2022-02-14  | 2022-02-15 | 09:23:00          | 0           |
| 1      | 2022-02-20  | 2022-02-25 | 12:10:01          |             |
| 2      | 2022-03-11  | 2022-03-21 | 08:21:00          | 0           |
| 2      | 2022-03-22  | 2022-03-27 | 02:36:00          |             |
| 2      | 2022-04-10  | 2022-04-15 | 11:43:03          |             |
| 3      | 2022-02-04  | 2022-02-06 | 16:51:00          | 0           |
| 3      | 2022-02-14  | 2022-02-23 | 19:35:10          |             |
| 4      | 2022-02-28  | 2022-10-12 | 00:01:00          | 0           |

Schließlich füllen wir die restlichen Zeilen mit der Bedingung, ob der end_dateWert der vorherigen Zeile (mit demselben num_ID) mindestens 7 Tage vom aktuellen entfernt ist start_date.

| num_ID | start_date  | end_date   | other_column      | total_times |
| ------ | ----------- | ---------- | ----------------- | ----------- |
| 1      | 2022-02-14  | 2022-02-15 | 09:23:00          | 0           |
| 1      | 2022-02-20  | 2022-02-25 | 12:10:01          | 0           |
| 2      | 2022-03-11  | 2022-03-21 | 08:21:00          | 0           |
| 2      | 2022-03-22  | 2022-03-27 | 02:36:00          | 0           |
| 2      | 2022-04-10  | 2022-04-15 | 11:43:03          | 1           |
| 3      | 2022-02-04  | 2022-02-06 | 16:51:00          | 0           |
| 3      | 2022-02-14  | 2022-02-23 | 19:35:10          | 1           |
| 4      | 2022-02-28  | 2022-10-12 | 00:01:00          | 0           |

Lösung

Sie können einen pro Gruppe verschobenen Vergleich mit verwenden groupby.shiftund ihn mit ge(≥) mit Ihrem Schwellenwert vergleichen und die boolesche Reihe in eine Ganzzahl umwandeln:

df['total_times'] = (df['start_date'].sub(df.groupby('num_ID')['end_date'].shift())
                     .ge('7d').astype(int)
                    )

Ausgang:

   num_ID start_date   end_date other_column  total_times
0       1 2022-02-14 2022-02-15     09:23:00            0
1       1 2022-02-20 2022-02-25     12:10:01            0
2       2 2022-03-11 2022-03-21     08:21:00            0
3       2 2022-03-22 2022-03-27     02:36:00            0
4       2 2022-04-10 2022-04-15     11:43:03            1
5       3 2022-02-04 2022-02-06     16:51:00            0
6       3 2022-02-14 2022-02-23     19:35:10            1
7       4 2022-02-28 2022-10-12     00:01:00            0


Beantwortet von –
mozway


Antwort geprüft von –
Timothy Miller (FixError Admin)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like