Как использовать iterrows для исправления значения во фрейме данных в Python Pandas? - PullRequest
0 голосов
/ 09 мая 2020

У меня есть фрейм данных, который я создал из файлов CSV и вставил в визуализацию графика. Проблема в том, что я заметил несколько резких отклонений. Два набора данных, с которыми я работаю, - это скорость ветра и порывы ветра. По сути, я хочу, чтобы любое значение, при котором скорость ветра больше, чем значение порыва, было переопределено как порыв.

Я просмотрел его строки, и я думаю, что близок, я получил ключевое значение = 0 wen Я пытаюсь запустить свой для l oop, который, как я прочитал, связан с тем, что я пытаюсь выполнить l oop через индексированный фрейм данных. Однако все исправления, которые я видел, не помогли. Как я могу go просматривать каждый кадр данных строка за строкой и переопределять значение для другого кадра данных, если это условие выполняется?

Вот мой соответствующий фрагмент кода:

 #Imports of data above this snippet

    #Create tables with monthly mean & max wind speeds
    #Ignore null values
    wind = pd.DataFrame(df, columns = ['wind_speed'])
    wind.dropna(how = 'any', inplace = True)
    wind['wind_speed'] = wind['wind_speed'].astype(str).astype(float)
    wind_m = wind.resample('M').mean()
    wind_max = wind.resample('M').max()

    #Limit to May-November
    wind_m = wind_m[wind_m.index.month.isin([5,6,7,8,9,10])]
    wind_max = wind_max[wind_max.index.month.isin([5,6,7,8,9,10])]

    #Build the same mean and max tables for wind gusts
    gust = pd.DataFrame(df, columns = ['wind_gust'])

    #Drop all rows that don't contain a gust (inplace)
    gust.dropna(how = 'any', inplace = True)
    #Convert data types from objects to datetime and float
    gust['wind_gust'] = gust['wind_gust'].astype(str).astype(float)
    gust_m = gust.resample('M').mean()
    gust_max = gust.resample('M').max()

    #Limit to May-November
    gust_m = gust_m[gust_m.index.month.isin([5,6,7,8,9,10])]
    gust_max = gust_max[gust_max.index.month.isin([5,6,7,8,9,10])]

    #Impose a catch that redefines any wind greater than the gust value as a gust
    i = 0
    for index, row in wind_max.iterrows():
        if wind_max[i] > gust_max[i]:
            gust_max[i] = wind_max[i]    # this is where I return the key error
        i += 1

   #Visualizations below this snippet

** РЕДАКТИРОВАТЬ: Пример визуализации и набора данных для каждого запроса:

enter image description here

Обратите внимание на выброс, когда красная линия превышает синюю линию, чего никогда не должно происходить. Если красная линия превышает синюю, ее следует переопределить как порыв (синий)

Пример набора данных:

Столбцы: ID станции, Дата и время, Скорость ветра, порыв ветра

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...