Как проще и правильно добавить в индекс дополнительное условие, чтобы сделать код проще и понятнее? - PullRequest
0 голосов
/ 18 января 2020

Контекст : Я пытаюсь получить из моего набора данных записи, соответствующие следующим условиям:

  • Если отметка времени находится в диапазоне 01: 00-05: 00 утра
  • И если значение «угрозы» равно «3»

РЕДАКТИРОВАТЬ : Таким образом, очевидно, я могу распечатать все часы в выбранном пользователем, который получен для 'listCoords ', делая' listCoord.index.hour '. Потому что час является атрибутом DateTime в pandas. Этот код, который я использую в условном выражении моего кода: color=np.where((listCoords.index.hour == 6), 'red', '#5DBCD2')]

К этому коду я также хочу добавить условие: listCoord.index.Thread == '3', чтобы мой код стал :

color=np.where((listCoords.index.hour == 6) & (listCoord.index.Thread == '3'), 'red', 'blue')]

Но очевидно, что «Поток» - это просто имя столбца в моем наборе данных, а не атрибут DateTime в pandas. Вопрос : как добавить второе условие к той же строке? Чтобы мой код стал проще и понятнее.




Мой набор данных : новый образец набора данных points.csv:

Date/Time               Lat,                 Lon,                  Threat
2019-03-23 04:00:00,   -14.809489988279145,  26.191607774273443,    1
2019-03-23 04:00:00,   -14.792921094981814,  26.191716715339687,    2
2019-03-23 04:05:00,   -14.798684405083584,  26.162881454312586,    3
2019-03-23 04:10:00,   -14.80112670820822,   26.173830400821103,    2

РЕДАКТИРОВАН. - Мой код :

   def update_graph(datePicked, selectedData, selectedLocation):
    zoom = 10.5
    latInitial = -14.873619
    lonInitial = 26.106700
    bearing = 0

    if selectedLocation:
        zoom = 13.0
        latInitial = list_of_fixed_sensors[selectedLocation]["lat"]
        lonInitial = list_of_fixed_sensors[selectedLocation]["lon"]

    date_picked = dt.strptime(datePicked, "%Y-%m-%d")
    monthPicked = date_picked.month - 4
    dayPicked = date_picked.day - 1
    listCoords = getLatLonColor(selectedData, monthPicked, dayPicked)

    # print(listCoords.index.Threat)

return go.Figure(
        data=[
            # Data for all observations based on date and time
            Scattermapbox(
                lat=listCoords["Lat"],
                lon=listCoords["Lon"],
                mode="markers",
                hoverinfo="text + lat + lon",
                text=listCoords.index.hour,
                marker=dict(
                    showscale=True,
                    # the color is decided by the time of detection.
                    # color=np.append(np.insert(listCoords.index.hour, 0, 0), 23),
                    color=np.where((listCoords.index.hour == 6), 'red', 'blue')]

1 Ответ

1 голос
/ 18 января 2020

Один вкладыш будет

df[(df['threat'] == 3) & df['Date/Time'].between_time('01:00', '05:00')]

при условии, что df['Date/Time'].dtype равен datetime, если не использовать pd.to_datetime

Для редактирования случая используйте:

color=np.where((listCoords.index.hour == 6) & (listCoord['Thread'] == '3'), 'red', 'blue')]

...