Daten aus andrem Dataframe auswählen

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
MiracelVip
User
Beiträge: 1
Registriert: Mittwoch 19. Februar 2020, 08:27

Hallo Zusammen,

ich habe mich hier angemeldet, da mir die vielen Beiträge hier bereits sehr unterstützt haben. Leider finde ich zu meinem aktuellen Problem keine informationen, was aber höchstwahrscheinlich an falschen Begrifflichkeiten liegt.

Ich habe zwei Dataframes, welche ich aus CSV Daten importiere. DF1 beinhaltet Zeitbasiert Messdaten in 5ms Auflösung. DF2 beinhaltet eine Beschleinigungskurve welche der Messaufnehmer wärend der Datenaufnahme durchläuft. Aufgrund eines Tricker-Signals kenne ich die exakte Position am anfang des 1. DF.

Nun möchte ich die richtigen Werte der Beschleunigung aufgrund der verstrichenen Zeit auswählen und im DF1 speichern. Ich finde bisher keine Lösung hierfür und freue mich auf jeden Tipp.

Code: Alles auswählen

DF1: Messwerte                              DF2: Beschleunigungswerte
        Zeit        Kraft       ....                Start       Ende        Beschleunigung
1       5           0                       1       0           30          0.00
2       10          0                       2       30          40          0.23
3       15          5                       3       40          200         0.25
4       20          10                      4       200         220         0.00
5       25          5                       5       220         300         0.30
6       30          100                     6       300         400         0.35
7       35          20                      7       400         500         0.35
8       40          30                      8       500         510         0.20
9       45          40                      9       510         550         0.00
10      50          30                      10      550         600         0.90
.....                                       .....
~ 6-10k Zeilen                              ~ 300 Zeilen

_______________________________________________________________________________________________

Ziel DF:
        Zeit        Kraft       Beschleunigung
1       5           0           0.00
2       10          0           0.00
3       15          5           0.00
4       20          10          0.00
5       25          5           0.00
6       30          100         0.23
7       35          20          0.23
8       40          30          0.25
9       45          40          0.25
10      50          30          0.25
.....

Ich danke euch und gruß
Benutzeravatar
__blackjack__
User
Beiträge: 14051
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Sieht eventuell nach einem join/merge aus nachdem die Zeit/Start zum Index gemacht wurde und dann ein Auffüllen der NaN-Werte in "Beschleunigung" mit dem letzten nicht-NaN-Wert.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
einfachTobi
User
Beiträge: 512
Registriert: Mittwoch 13. November 2019, 08:38

Eine Beinahe-Umsetzung von __blackjack__s Vorschlag:

Code: Alles auswählen

import pandas as pd

werte_kraft = [(0,0),
               (5, 0), 
               (10, 0), 
               (15, 5), 
               (20, 10),
               (25, 5),
               (30, 100),
               (35, 20),
               (40, 30),
               (45, 40),
               (50, 30)]

werte_beschleunigung = [(0, 30, 0.00),
                        (30, 40, 0.23),
                        (40, 200, 0.25),
                        (200, 220, 0.00),
                        (220, 300, 0.30),
                        (300, 400, 0.35),
                        (400, 500, 0.35),
                        (500, 510, 0.20),
                        (510, 550, 0.00),
                        (550, 600, 0.90)]

df1 = pd.DataFrame(werte_kraft, columns=['Zeit', 'Kraft'])
df2 = pd.DataFrame(werte_beschleunigung, columns=['Start', 'Ende', 'Beschleunigung'])
print(df1)
print(df2)
df3 = pd.merge(df1, df2, left_on='Zeit', right_on='Start', how='left')
df4 = df3.ffill(axis='rows')
print(df4)
Da ist ggf. noch Potential, aber ich habe heut Abend keinen Kopf mehr um darüber nachzudenken :) Vielleicht hilft es ja so schon weiter.
Antworten