/ / Как да приложим функция към всяка колона на осова таблица в панда? - питън, панда, информационна рамка

Как да приложим функция към всяка колона на осова таблица в панда? - питън, панда, информационна рамка

Код:

df = pd.read_csv("example.csv", parse_dates=["ds"])
df2 = df.set_index(["ds", "city"]).unstack("city")
rm = pd.rolling_mean(df2, 3)
sd = pd.rolling_std(df2,3)

Изход df2:

въведете описанието на изображението тук

Това, което искам: Искам да видя дали за всеки град, за всяка дата, ако броят е по-голям от 1 стод на разстояние от средната за резервации за този град. За бившия псевдокод:

for each (city column)
for each (date)
see whether the (number of bookings) - (same date and city rolling mean) > (same date and city std dev)
print that date and city and number of bookings

Какъв е проблемът: Имам проблем да се опитам да разбера как да получа достъп до данните, от които се нуждая от всяка от рамките за данни, за да го направят. Частите на псевдокода в скоби са това, от което се нуждая, за да разбера.

Това, което се опитах:

df2 [ "град"] списък (df2)

Двете ми дават грешки.

df2 [1: 2]

Снаждане работи, но аз се чувствам като този не е най-добрият начин за достъп до него.

Отговори:

1 за отговор № 1

Трябва да използвате apply функция на API на DataFrame. Демото е по-долу:

import pandas as pd
df = pd.DataFrame({"A": [1,2,3,4,5]; "B": [1,2,3,4,5]})
df["C"] = df.apply(lambda row: row["A"]*row["B"], axis=1)

изход:

>>> df
A  B   C
0  1  1   1
1  2  2   4
2  3  3   9
3  4  4  16
4  5  5  25

По-конкретно за вашия случай:

  1. Трябва да прекомплектирате: "същата дата и градска подвижна средна стойност", "същата дата и градски стандарт". Можеш да използваш groupby функция за него, тя позволява да се агрегират данни чрез град и дата, след което можете да изчислите std dev и mean.

  2. Сложете std dev и означава в таблицата си, използвайте речник за него: some_dict = {("city", "date"):[std_dev, mean], ..}, За поставяне на данни в компютърната рамка Приложи функция.

  3. Имате всички необходими данни за провеждане на чека ви от Приложи функция.