找到2个依赖属性的最大计数,并用该值替换重复的行

2024-09-29 21:39:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我在熊猫公司工作,我有一个数据集/数据框,看起来像这样。你知道吗

venueId                     venueCategoryId             venueCategory
v1                          vc1                         Airport
v1                          vc2                         Park     
v1                          vc1                         Airport
v2                          vc3                         American Restaurant
v3                          vc4                         Italian Restaurant
v3                          vc5                         Restaurant

venueId代表独特的场馆,category代表什么类型的场馆。CategoryId和CategoryName值是相关的。你知道吗

我正在尝试将某个场馆的venueCategoryId和VENUECOREGORY替换为该场馆中最高的类别。你知道吗

我想要得到的结果是:

venueId                     venueCategoryId             venueCategory
v1                          vc1                         Airport
v2                          vc3                         American Restaurant
v3                          vc4                         Italian Restaurant

我试图使用“venueId”列上的groupby来分组并找到计数并替换为最高计数。但我不知道如何将venueCategoryId和venueCategory作为pandas中的一个依赖列,并找到最多2个列并替换它们。你知道吗


Tags: 数据v3restaurantv2v1americanitalianvc3
1条回答
网友
1楼 · 发布于 2024-09-29 21:39:10

这里有一个通过^{}的解决方案。很可能有一种更为宽宏大量的方法。你知道吗

# combine id and category series
df['venueIdCat'] = list(zip(df.venueCategoryId, df.venueCategory))

# groupby venueId and extract mode
res = df.groupby('venueId')['venueIdCat'].apply(pd.Series.mode).reset_index()

# unsplit id and category
res = res.join(pd.DataFrame(res['venueIdCat'].values.tolist(),
                            columns=['venueCategoryId', 'venueCategory']))

# select required columns
res = res[['venueId', 'venueCategoryId', 'venueCategory']]

print(res)

  venueId venueCategoryId       venueCategory
0      v1             vc1             Airport
1      v2             vc3  AmericanRestaurant
2      v3             vc4   ItalianRestaurant

使用collections.Counter的替代解决方案:

from collections import Counter

# combine id and category series
df['venueIdCat'] = list(zip(df.venueCategoryId, df.venueCategory))

# groupby venueId and extract mode
res = df.groupby('venueId')['venueIdCat'].apply(lambda x: Counter(x).most_common()[0][0]).reset_index()

# unsplit id and category
res = res.join(pd.DataFrame(res['venueIdCat'].values.tolist(),
                            columns=['venueCategoryId', 'venueCategory']))

# select required columns
res = res[['venueId', 'venueCategoryId', 'venueCategory']]

print(res)

  venueId venueCategoryId       venueCategory
0      v1             vc1             Airport
1      v2             vc3  AmericanRestaurant
2      v3             vc4   ItalianRestaurant

相关问题 更多 >

    热门问题