<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>

          Pandas必知必會(huì):4種數(shù)據(jù)透視函數(shù)

          共 4645字,需瀏覽 10分鐘

           ·

          2022-06-15 09:39

          今天和大家分享Pandas中四種有關(guān)數(shù)據(jù)透視的通用函數(shù),在數(shù)據(jù)處理中遇到這類需求時(shí),能夠很好地應(yīng)對(duì)。

          pandas.melt()

          melt函數(shù)的主要作用是將DataFrame從寬格式轉(zhuǎn)換成長格式。

          pandas.melt(frame,id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None, ignore_index=True)

          參數(shù)含義

          • id_vars:tuple, list, or ndarray,可選,作為標(biāo)識(shí)符變量的列
          • value_vars:tuple, list, or ndarray, 可選,透視列,如果未指定,則使用未設(shè)置為id_vars的所有列。
          • var_name:scalar,默認(rèn)為None,使用variable作為列名
          • value_name:標(biāo)量, default ‘value’,value列的名稱
          • col_level:int or str, 可選,如果列是多層索引,melt將應(yīng)用于指定級(jí)別
          • ignore_index:bool, 默認(rèn)為True,相當(dāng)于從0開始重新排序。如果為False,則保留原來的索引,索引標(biāo)簽將出現(xiàn)重復(fù)。

          看個(gè)例子先:

          import pandas as pd

          df = pd.DataFrame(
              {'地區(qū)': ['A''B''C'],
               '2020': [806040],
               '2021': [800600400], 
               '2022': [800060004000]})
          pd.melt(df,
                  id_vars=['地區(qū)'],
                  value_vars=['2020''2021''2022'])

          設(shè)置var_namevalue_name。

          df = pd.melt(df,
                       id_vars=['地區(qū)'],
                       value_vars=['2020''2021''2022'],
                       var_name='年份',
                       value_name='銷售額')

          pandas.pivot()

          pivot函數(shù)主要用于通過索引及列值對(duì)DataFrame重構(gòu)。

          pandas.pivot(data, index=None, columns=None, values=None)

          參數(shù)含義

          • data:DataFrame對(duì)象
          • index:可選,用于新DataFrame的索引
          • columns:用于創(chuàng)建新DataFrame的列
          • values:可選,用于填充新DataFrame的值

          用上面的結(jié)果舉個(gè)例子:

          df.pivot(index='年份',
                   columns='地區(qū)',
                   values='銷售額')

          也可以寫成以下格式。

          df.pivot(index='年份', columns='地區(qū)')['銷售額']

          添加一個(gè)銷量列,同時(shí)統(tǒng)計(jì)兩個(gè)values,這樣會(huì)使columns變成多層索引。

          df['銷量'] = df['銷售額']/10
          df.pivot(index='年份',
                   columns='地區(qū)',
                   values=['銷售額''銷量'])

          添加一個(gè)月份列,指定兩個(gè)index。

          df['月份'] = [f'{m}月' for m in range(14)]*3
          df.pivot(index=['年份''月份'],
                   columns='地區(qū)',
                   values='銷售額')

          使用pivot時(shí)需要注意,當(dāng)index,columns出現(xiàn)重復(fù)時(shí),會(huì)導(dǎo)致ValueError。

          df = pd.DataFrame(
                  {'地區(qū)': ['A''A''B''C'],
                   '年份': ['2020''2020''2021''2022'],
                   '銷售額': [800600400200]})
          df.pivot(index='地區(qū)',
                   columns='年份',
                   values='銷售額')
          # ValueError

          pandas.pivot_table()

          這個(gè)函數(shù)之前已經(jīng)單獨(dú)講過了,詳見Pandas玩轉(zhuǎn)數(shù)據(jù)透視表,相比于pivot,pivot_table的靈活性更強(qiáng)。

          pandas.crosstab()

          crosstab函數(shù)計(jì)算兩個(gè)(或多個(gè))數(shù)組的簡(jiǎn)單交叉表。默認(rèn)情況下計(jì)算元素的頻率表。

          pandas.crosstab(index, columns, values=None, rownames=None, colnames=None, aggfunc=None, margins=False, margins_name='All', dropna=True, normalize=False)

          看下例子:
          這里默認(rèn)計(jì)算頻率。

          import numpy as np
          array_A = np.array(["one""two""two""three""three""three"], dtype=object)
          array_B = np.array(["Python""Python""Python""C""C""C"], dtype=object)
          array_C = np.array(["Y""Y""Y""N""N""N"])
          pd.crosstab(array_A,
                     [array_B, array_C],
                     rownames=['array_A'],
                     colnames=['array_B''array_C'])

          新建一個(gè)values列,計(jì)算總和。

          array_D = np.array([149162536])
          pd.crosstab(index=array_A,
                      columns=[array_B, array_C],
                      rownames=['array_A'],
                      colnames=['array_B''array_C'],
                      values=array_D,
                      aggfunc='sum')

          如果有不理解的地方可以自己動(dòng)手嘗試一下,也可以通過直接私信交流。感謝支持。


          掃碼即可加我微信

          學(xué)習(xí)交流

          老表朋友圈經(jīng)常有贈(zèng)書/紅包福利活動(dòng)


          萬水千山總是情,點(diǎn)個(gè) ?? 行不行。

          瀏覽 90
          點(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>
                  俺去操逼| 亚洲性爱电影在线免费观看 | 一区二区三区四区五区无码 | 日韩特黄| 亲子乱高潮1000部视频A片 |