<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          分享一個(gè)Pandas應(yīng)用實(shí)戰(zhàn)案例——使用Python實(shí)現(xiàn)根據(jù)關(guān)系進(jìn)行分組

          共 3248字,需瀏覽 7分鐘

           ·

          2024-04-10 17:21

          迎新年,GPT-4 Plus賬號(hào)大大降價(jià)了!

          一、前言

          近日,有群友提出這樣的問(wèn)題:

          fe6665f5b28e18e3f1f3de1359c57b5f.webp

          群友提示可以使用ChatGPT,并給出代碼:

          ad3714f714e0534cb24949d897468096.webp

          二、實(shí)現(xiàn)過(guò)程

          這里【瑜亮老師】給出了另外一個(gè)答案,與此同時(shí),根據(jù)需求,構(gòu)造數(shù)據(jù),使用pandas也可以完成需求,代碼如下:

                  
                  import pandas as pd

          data = [
              ['劉備''關(guān)羽'], ['劉備''張飛'],
              ['曹操''夏侯'], ['張飛''諸葛'],
              ['夏侯''荀彧'], ['孫權(quán)''魯肅']
          ]

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


          # 創(chuàng)建一個(gè)空字典用于存儲(chǔ)人名與組別的映射關(guān)系
          groups = {}

          # 遍歷數(shù)據(jù)框的每一行
          for _, row in df.iterrows():
              sender = row['發(fā)起']
              receiver = row['接收']

              # 檢查發(fā)起者是否已存在于映射關(guān)系中
              if sender not in groups:
                  # 如果不存在,則將發(fā)起者添加到映射關(guān)系中,并分配一個(gè)新的組別
                  group = max(groups.values()) + 1 if groups else 1
                  groups[sender] = group

              # 檢查接收者是否已存在于映射關(guān)系中
              if receiver not in groups:
                  # 如果不存在,則將接收者添加到映射關(guān)系中,并分配與發(fā)起者相同的組別
                  group = groups[sender]
                  groups[receiver] = group

          # 根據(jù)人名與組別的映射關(guān)系更新數(shù)據(jù)框的'組別'列
          df['組別'] = df['發(fā)起'].map(groups)
          print(df)

          # 同時(shí)可以將groups也用字典形式輸出
          result = {}
          for k, v in groups.items():
              if v not in result.keys():
                  result[v] = k
              else:
                  result[v] += "," + k
          print(result)

          運(yùn)行之后可以得到如下結(jié)果:

          15b4abaa532f5f0c05185c1681a85be7.webp

          同時(shí),根據(jù)大佬的提示,在python中這是典型的查找連通圖的問(wèn)題,直接的思路是使用現(xiàn)成的networkx包直接調(diào)用求解連通圖的算法即可,代碼如下:

                  
                  import networkx as nx

          g = nx.Graph()
          data = [
              ['劉備''關(guān)羽'], ['劉備''張飛'],
              ['曹操''夏侯'], ['張飛''諸葛'],
              ['夏侯''荀彧'], ['孫權(quán)''魯肅']
          ]
          g.add_edges_from(data)

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

          代碼運(yùn)行后的結(jié)果如下:

          19f21d9dbb78fee9e7f4efffe1835901.webp

          使用networkx我們還可以將圖繪制出來(lái):

                  
                  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 = [
              ['劉備''關(guān)羽'],    ['劉備''張飛'],
              ['曹操''夏侯'],    ['張飛''諸葛'],
              ['夏侯''荀彧'],    ['孫權(quán)''魯肅']
          ]
          g.add_edges_from(data)
          nx.draw_networkx(g)

          代碼運(yùn)行后的結(jié)果如下:73b8681aa957f90286c845e6e9af14a0.webp

          三、總結(jié)

          這篇文章主要盤(pán)點(diǎn)了一個(gè)Pandas數(shù)據(jù)分析的問(wèn)題,文中針對(duì)該問(wèn)題,給出了具體的解析和代碼實(shí)現(xiàn),幫助粉絲順利解決了問(wèn)題

          GPT-4 Office 全家桶發(fā)布,我們的工作方式將永遠(yuǎn)改變!


          瀏覽 32
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲人人操 | 美女被操免费视频网站 | 一级黄色a | 日韩免费看片 | 美女嗦鸡吧视频网站 |