Применение функции, которая включает в себя несколько логических операций в мультииндексированном фрейме данных построчно к другому фрейму данных - PullRequest
0 голосов
/ 21 января 2019

У меня есть вопрос, касающийся Pandas Multiindex и применения функции.У меня есть следующий многоиндексированный набор данных в результате этого кода:

grouped_df = df.groupby(by = ["individual", "cluster"])["totalTripDurationMinutes", "totalPrice"].min()

with shape (2931, 2):

                    totalTripDurationMinutes  totalPrice
individual cluster                                      
967380     0                             160      317.25
           1                             160      363.75
           2                             160      463.75
           3                             160      523.75
           4                             160      523.75

И у меня есть другой набор данных, который также имеет столбцы individual, totalTripDurationMinutes, cluster и totalPrice вместе с другими столбцами.То, что я хочу сделать, это для каждого человека и для каждого кластера выяснить, равна ли цена минимальной цене и продолжительности для этого кластера и отдельного человека, как логическое значение в таблице df_grouped выше.Я сделал эти пользовательские функции:

def domPriceFinder(row, groupedPricesDf = grouped_df):
  menuId = row["individual"]
  clusterId = row["cluster"]
  minPrice = groupedPricesDf.loc[((groupedPricesDf.index.get_level_values("individual") == menuId) & 
                                 (groupedPricesDf.index.get_level_values("cluster") == clusterId)).all()]["totalPrice"]
  return 1 if row["totalPrice"] == minPrice else 0

def domDurationFinder(row, groupedPricesDf = grouped_df):
  menuId = row["individual"]
  clusterId = row["cluster"]
  minDuration = groupedPricesDf.loc[((groupedPricesDf.index.get_level_values("individual") == menuId) & 
                                    (groupedPricesDf.index.get_level_values("cluster") == clusterId)).all()]["totalTripDurationMinutes"]
  return 1 if row["totalTripDurationMinutes"] == minDuration else 0

Однако, когда я применяю эти функции к моему исходному df построчно, я получаю ошибку

KeyError: ('the label [False] is not in the [index]', 'occurred at index 0')

это мои функции применения:

df["isDominantPrice"] = df.apply(domPriceFinder, axis = 1)
df["isDominantDuration"] = df.apply(domDurationFinder, axis = 1)

Кто-нибудь может мне помочь с этим?Я предполагаю, что я делаю что-то не так с логическими операциями в моих пользовательских функциях

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