pandas 获取groupby中特定唯一名称的所有值的总和

wxclj1h5  于 2023-03-28  发布在  其他
关注(0)|答案(1)|浏览(178)

我希望这是有意义的,但是我需要得到一列的值的总和,但它需要是与groupby生成的组中的一个特定的唯一行值相关联的所有值。

这是我用来分组所有内容的代码:

df_revPAR = df.groupby('IndustrySegmentName', as_index=False)[
    ['BrandRevenueTY', 'BrandSupplyTY', 'BrandDemandTY', 
     'IndustryRevenueTY', 'IndustrySupplyTY', 'IndustryDemandTY']].sum()

这确实根据我想要的“IndustrySegmentName”对数据进行了分组,它给了我品牌数据的总和(每个酒店每天的数字)。这就是我需要的品牌数据信息。
问题来了行业数据(IndustrySupplyTY,IndustryDemandTY,IndustryRevenueTY)针对不同的酒店名称重复。整个集团的行业数据都是相同的(IndustrySegementName)。这不是像“BrandSupply”或“BrandRevenue”数据那样的单个数据。我不需要获得该组中每个不同酒店的所有行的总和。我只需要酒店的的行业数据,或者我需要将从上述代码中获得的总和除以每个IndustrySegmentName中分组的唯一酒店名称的数量。如何执行这两种操作?
例如,在高档组中,我只需要从Hotel靛蓝获取“IndustryX”数据的总和,就可以用作整个“Upscale”组的“IndustryX”数据,而不是Hotel Indigo和Plaza Hotel中所有值的总和。
或者我需要取“Upscale”组中的“IndustryX”数据的总和,然后将其除以2(该组中唯一酒店的数量),但我需要一种方法来获得此计数。
潜在的解决方案,但正在寻找更好的编码方法:

df_brandcount = df.groupby('IndustrySegmentName', as_index=False)[
    ['Hotel Name']].nunique()
df_revPAR['BrandCount'] = df_brandcount['Hotel Name']
wh6knrhe

wh6knrhe1#

为什么不做两个分开的组呢?
因此,一个用于酒店特定数据,一个用于行业特定数据。然后,您可以合并数据。
未测试的代码,因为没有提供测试数据样本:

df_hotel = df.groupby('IndustrySegmentName', as_index=False)[
    ['BrandRevenueTY', 'BrandSupplyTY', 'BrandDemandTY', 
     'IndustryRevenueTY', 'IndustrySupplyTY', 'IndustryDemandTY']].sum()
df_brand = df.groupby(['IndustrySegmentName','DateTY'], as_index=False)[
    ['IndustryRevenueTY', 'IndustrySupplyTY', 'IndustryDemandTY']].max().groupby('IndustrySegmentName', as_index=False)[
    ['IndustryRevenueTY', 'IndustrySupplyTY', 'IndustryDemandTY']].sum()

df_revPAR = pd.merge(df_brand, df_hotel, on='IndustrySegmentName')

相关问题