Panda Dataframe манипулирование - PullRequest
0 голосов
/ 13 апреля 2020

Может кто-нибудь объяснить мне, как решить эту проблему.

Допустим, у меня есть такой фрейм данных:

Df = {'toto': ["A", "B", "C", "D"], 
      'titi': ["g", "t", "x", "z"],
      'Energy': [180, 345, 234, 654],
      'T10sec': [0.1, 0.4, 0.5, 1], 
      'T50sec': [5.3, 5.7, 8, 2]}

Для этого Df я создал функцию типа

def record(letter1, letter2, Energy_value, time):

Что я хочу сделать, это

Проверьте, есть ли: вводимые значения в этом Df, если yes, то

Results = Df.thecorrespondingtime[i]

Предположим, что для в столбцах 'toto' и 'titi' буква ввода находится в Df, возможны два варианта:

Case1: вход 'Energy_value' имеет значение Df, но не значение 'time', тогда я нужно найти диапазон этого значения, создать его столбец и заполнить его интерполяцией.

Случай 2: значение столбца 'time' существует, но входное значение энергии нет. Здесь я снова должен выполнить интерполяцию.

Мои ограничения: как проверить, существует ли столбец 'time' и как поместить между двумя существующими значениями. Тот же вопрос для входного значения энергии.

Вот что я попробовал:

def record(letter1, letter2, Energy_value, time='T15sec'):
    For i in range(len(Df)):
        If ((df.toto[i] == letter1) and 
            (df.titi[i] == letter2) and 
            (df.Energy[i] == Energy_value) and 
            (time in df)):

Но это не работает. Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 14 апреля 2020

Если вопрос в основном о вставке другого столбца времени в фрейм данных, это будет решение:

import pandas as np

df = pd.DataFrame({'toto': ["A", "B", "C", "D"], 
      'titi': ["g", "t", "x", "z"],
      'Energy': [180, 345, 234, 654],
      'T10sec': [0.1, 0.4, 0.5, 1], 
      'T50sec': [5.3, 5.7, 8, 2]})
df
    toto    titi    Energy  T10sec  T50sec
0   A       g       180     0.1     5.3
1   B       t       345     0.4     5.7
2   C       x       234     0.5     8.0
3   D       z       654     1.0     2.0

Добавить столбец времени:

import numpy as np
time = 'T15sec'

if not time in df:
    df[time] = np.NaN

df.iloc[:, 3:] = df.iloc[:, 3:].T.sort_index().interpolate().T

df[['toto', 'titi', 'Energy', 'T10sec', time, 'T50sec']]

    toto    titi    Energy  T10sec  T15sec  T50sec
0   A       g       180     0.1     2.70    5.3
1   B       t       345     0.4     3.05    5.7
2   C       x       234     0.5     4.25    8.0
3   D       z       654     1.0     1.50    2.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...