首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于dataframe (python)列表中相同项的组

基于dataframe (python)列表中相同项的组
EN

Stack Overflow用户
提问于 2020-05-21 08:51:26
回答 1查看 71关注 0票数 2

我是分组旅行者谁一起旅行,根据百分比的旅行,他们一起。这似乎类似于另一个问题(Group Python list of lists into groups based on overlapping items),但条件不同。

只有在80%的旅行者和一起旅行的情况下,他们才会被聚在一起。如果同一个旅行者是在不同的群体中,那是可以的。

数据:(实际数据集很大,超过1000次旅行和旅行者)

代码语言:javascript
运行
复制
Traveller  Trips
   A       [Trip_1, Trip_2, Trip_3, Trip_4, Trip_5]
   B       [Trip_1, Trip_2, Trip_3, Trip_4]
   C       [Trip_6, Trip_7]
   D       [Trip_8]
   E       [Trip_2, Trip_3, Trip_4, Trip_5]
   F       [Trip_2, Trip_3, Trip_4, Trip_5]
   G       [Trip_8]

预期产出:

代码语言:javascript
运行
复制
TravelGroup  Traveller
  Group_1       A
  Group_1       B
  Group_2       A
  Group_2       E
  Group_2       F
  Group_3       C
  Group_4       D
  Group_4       G

注意A和B在一个组中,A、E和F在一个组中。然而,B和C并不属于组,因为他们在旅行中只有75%的匹配。

非常感谢您的帮助,非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2020-05-21 09:41:44

代码语言:javascript
运行
复制
df = pd.DataFrame({'Traveller':[*'ABCDE'], 'Trips': [
    ['Trip_1', 'Trip_2', 'Trip_3', 'Trip_4', 'Trip_5'],
    ['Trip_1', 'Trip_2', 'Trip_3', 'Trip_4'],
    ['Trip_1', 'Trip_2'],
    ['Trip_1'],
    ['Trip_2', 'Trip_3', 'Trip_4', 'Trip_5']
    ] })

from itertools import combinations

all_trips = df.explode('Trips')['Trips'].nunique()
all_travelers = set(df.Traveller)

groups, cnt = {'TravelGroup':[], 'Traveller':[]}, 1
for t1, t2 in combinations(df.Traveller, 2):
    s1 = df.loc[df.Traveller==t1, 'Trips'].iloc[0]
    s2 = df.loc[df.Traveller==t2, 'Trips'].iloc[0]
    if len(set(s1).intersection(s2)) / all_trips >= 0.8:
        group_name = 'Group_{}'.format(cnt)
        groups['TravelGroup'].extend([group_name, group_name])
        groups['Traveller'].extend([t1, t2])
        cnt += 1

df = pd.DataFrame(groups)
for t in all_travelers.difference(df.Traveller):
    group_name = 'Group_{}'.format(cnt)
    df.loc[df.shape[0]] = [group_name, t]
    cnt += 1

print(df)

指纹:

代码语言:javascript
运行
复制
  TravelGroup Traveller
0     Group_1         A
1     Group_1         B
2     Group_2         A
3     Group_2         E
4     Group_3         D
5     Group_4         C
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61930700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档