在多索引数据帧上将涉及多个布尔操作的函数按行应用到另一个数据帧

时间:2019-01-21 11:04:43

标签: python pandas dataframe pandas-groupby

我对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

我还有另一个数据集,其中也有列individualtotalTripDurationMinutesclustertotalPrice以及其他列。我想要做的是针对每个个体和每个集群,找出价格是否等于该集群和个体的最小价格和持续时间,如上表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)

有人可以帮助我吗?我想我的自定义函数中的逻辑操作有问题

0 个答案:

没有答案