打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
分享一个Pandas应用实战案例——使用Python实现根据关系进行分组

一、前言

近日,有群友提出这样的问题:

群友提示可以使用ChatGPT,并给出代码:

二、实现过程

这里【瑜亮老师】给出了另外一个答案,与此同时,根据需求,构造数据,使用pandas也可以完成需求,代码如下:

import pandas as pd

data = [
    ['刘备''关羽'], ['刘备''张飞'],
    ['曹操''夏侯'], ['张飞''诸葛'],
    ['夏侯''荀彧'], ['孙权''鲁肃']
]

df = pd.DataFrame(data, columns=['发起''接收'])


# 创建一个空字典用于存储人名与组别的映射关系
groups = {}

# 遍历数据框的每一行
for _, row in df.iterrows():
    sender = row['发起']
    receiver = row['接收']

    # 检查发起者是否已存在于映射关系中
    if sender not in groups:
        # 如果不存在,则将发起者添加到映射关系中,并分配一个新的组别
        group = max(groups.values()) + 1 if groups else 1
        groups[sender] = group

    # 检查接收者是否已存在于映射关系中
    if receiver not in groups:
        # 如果不存在,则将接收者添加到映射关系中,并分配与发起者相同的组别
        group = groups[sender]
        groups[receiver] = group

# 根据人名与组别的映射关系更新数据框的'组别'列
df['组别'] = df['发起'].map(groups)
print(df)

# 同时可以将groups也用字典形式输出
result = {}
for k, v in groups.items():
    if v not in result.keys():
        result[v] = k
    else:
        result[v] += ',' + k
print(result)

运行之后可以得到如下结果:

同时,根据大佬的提示,在python中这是典型的查找连通图的问题,直接的思路是使用现成的networkx包直接调用求解连通图的算法即可,代码如下:

import networkx as nx

g = nx.Graph()
data = [
    ['刘备''关羽'], ['刘备''张飞'],
    ['曹操''夏侯'], ['张飞''诸葛'],
    ['夏侯''荀彧'], ['孙权''鲁肃']
]
g.add_edges_from(data)

for sub_g in nx.connected_components(g):
    g_node = g.subgraph(sub_g).nodes()
    print(g_node)

代码运行后的结果如下:

使用networkx我们还可以将图绘制出来:

from matplotlib import pyplot as plt
import networkx as nx
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
g = nx.Graph()
data = [
    ['刘备''关羽'],    ['刘备''张飞'],
    ['曹操''夏侯'],    ['张飞''诸葛'],
    ['夏侯''荀彧'],    ['孙权''鲁肃']
]
g.add_edges_from(data)
nx.draw_networkx(g)

代码运行后的结果如下:

三、总结

这篇文章主要盘点了一个Pandas数据分析的问题,文中针对该问题,给出了具体的解析和代码实现,帮助粉丝顺利解决了问题


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
networkx快速解决连通图问题
数据可视化:四种关系图数据可视化的效果对比!
利用Python绘制关系网络图
直播案例 | 使用PageRank对全球机场进行排序
11个Python Pandas小技巧让你的工作更高效(附代码实例)
每天五分钟Python数据分析——Pandas 数据筛选
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服