欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Pandas中多重索引技巧的實(shí)現(xiàn)

 更新時(shí)間:2025年02月05日 10:41:22   作者:python慕遙  
Pandas中的多重索引功能強(qiáng)大,適用于處理多維數(shù)據(jù),本文就來(lái)介紹一下多重索引技巧,具有一定的參考價(jià)值,感興趣的可以了解一下

大家好,在數(shù)據(jù)分析中,處理復(fù)雜的多維數(shù)據(jù)是常見(jiàn)的需求。Python的Pandas庫(kù)提供了強(qiáng)大的多重索引(MultiIndex)功能,能夠靈活地管理和分析多層級(jí)的數(shù)據(jù)結(jié)構(gòu)。本文將介紹Pandas中的多重索引,探討如何創(chuàng)建、操作和重設(shè)多重索引,并通過(guò)具體的示例代碼展示其在實(shí)際應(yīng)用中的強(qiáng)大功能。

1.多重索引概述

多重索引是一種層次化的索引方式,它允許在DataFrame或Series中使用多個(gè)級(jí)別的索引。通過(guò)多重索引,我們可以更清晰地表達(dá)數(shù)據(jù)的層級(jí)關(guān)系,使得處理復(fù)雜數(shù)據(jù)集變得更加直觀和高效。

可以通過(guò)多列數(shù)據(jù)創(chuàng)建多重索引,從而將DataFrame組織成具有層次結(jié)構(gòu)的形式。

import pandas as pd

# 創(chuàng)建一個(gè)包含多個(gè)級(jí)別的DataFrame
data = {'城市': ['北京', '北京', '上海', '上海', '廣州', '廣州'],
        '年份': [2020, 2021, 2020, 2021, 2020, 2021],
        '人口': [2154, 2160, 2424, 2430, 1530, 1540],
        'GDP': [36102, 37200, 38155, 39400, 25000, 26000]}

df = pd.DataFrame(data)

# 設(shè)置多重索引
df.set_index(['城市', '年份'], inplace=True)

print(df)

運(yùn)行以上代碼,輸出結(jié)果:

         人口    GDP
城市  年份              
北京  2020  2154  36102
    2021  2160  37200
上海  2020  2424  38155
    2021  2430  39400
廣州  2020  1530  25000
    2021  1540  26000

在這個(gè)示例中,通過(guò) set_index() 函數(shù)將 城市 和 年份 兩列設(shè)置為多重索引,生成了一個(gè)具有層次結(jié)構(gòu)的DataFrame。

2.多重索引的基本操作

一旦我們創(chuàng)建了多重索引,Pandas提供了多種方法來(lái)操作和查詢這些數(shù)據(jù),包括選擇、切片、交換層級(jí)、重設(shè)索引等。

2.1 選擇和切片多重索引

多重索引使得我們可以輕松地選擇或切片數(shù)據(jù)。例如,可以選擇某個(gè)城市的數(shù)據(jù),或者選擇特定年份的數(shù)據(jù)。

import pandas as pd

# 創(chuàng)建一個(gè)包含多個(gè)級(jí)別的DataFrame
data = {'城市': ['北京', '北京', '上海', '上海', '廣州', '廣州'],
        '年份': [2020, 2021, 2020, 2021, 2020, 2021],
        '人口': [2154, 2160, 2424, 2430, 1530, 1540],
        'GDP': [36102, 37200, 38155, 39400, 25000, 26000]}

df = pd.DataFrame(data)
df.set_index(['城市', '年份'], inplace=True)

# 選擇特定城市的數(shù)據(jù)
beijing_data = df.loc['北京']
print("北京的數(shù)據(jù):\n", beijing_data)

# 選擇特定年份的數(shù)據(jù)
data_2021 = df.xs(2021, level='年份')
print("2021年的數(shù)據(jù):\n", data_2021)

運(yùn)行以上代碼,輸出結(jié)果:

北京的數(shù)據(jù):
       人口    GDP
年份              
2020  2154  36102
2021  2160  37200

2021年的數(shù)據(jù):
        人口    GDP
城市              
北京  2160  37200
上海  2430  39400
廣州  1540  26000

在這個(gè)示例中,使用 loc[] 選擇了北京的數(shù)據(jù),并使用 xs() 方法按年份選擇了2021年的數(shù)據(jù)。

2.2 交換層級(jí)與重設(shè)索引

多重索引可以交換不同級(jí)別的索引位置,并可以將多重索引重設(shè)為普通索引。

import pandas as pd

# 創(chuàng)建一個(gè)包含多個(gè)級(jí)別的DataFrame
data = {'城市': ['北京', '北京', '上海', '上海', '廣州', '廣州'],
        '年份': [2020, 2021, 2020, 2021, 2020, 2021],
        '人口': [2154, 2160, 2424, 2430, 1530, 1540],
        'GDP': [36102, 37200, 38155, 39400, 25000, 26000]}

df = pd.DataFrame(data)
df.set_index(['城市', '年份'], inplace=True)

# 交換索引的層級(jí)
swapped_df = df.swaplevel()
print("交換層級(jí)后的DataFrame:\n", swapped_df)

# 重設(shè)索引
reset_df = df.reset_index()
print("重設(shè)索引后的DataFrame:\n", reset_df)

運(yùn)行以上代碼,輸出結(jié)果:

交換層級(jí)后的DataFrame:
         人口    GDP
年份  城市              
2020  北京  2154  36102
2021  北京  2160  37200
2020  上海  2424  38155
2021  上海  2430  39400
2020  廣州  1530  25000
2021  廣州  1540  26000

重設(shè)索引后的DataFrame:
   城市   年份   人口    GDP
0  北京  2020  2154  36102
1  北京  2021  2160  37200
2  上海  2020  2424  38155
3  上海  2021  2430  39400
4  廣州  2020  1530  25000
5  廣州  2021  1540  26000

在這個(gè)示例中,使用 swaplevel() 交換了 城市 和 年份 索引的層級(jí),使用 reset_index() 將多重索引還原為普通索引。

3.多重索引的高級(jí)操作

除了基本的選擇和操作外,Pandas的多重索引還支持更高級(jí)的操作,如分組聚合、多索引切片、索引排序等,這些功能可以更靈活地處理復(fù)雜的數(shù)據(jù)集。

3.1 多重索引的分組聚合

可以在多重索引的基礎(chǔ)上進(jìn)行分組操作,并應(yīng)用聚合函數(shù),如計(jì)算總和、平均值等。

import pandas as pd

# 創(chuàng)建一個(gè)包含多個(gè)級(jí)別的DataFrame
data = {'城市': ['北京', '北京', '上海', '上海', '廣州', '廣州'],
        '年份': [2020, 2021, 2020, 2021, 2020, 2021],
        '人口': [2154, 2160, 2424, 2430, 1530, 1540],
        'GDP': [36102, 37200, 38155, 39400, 25000, 26000]}

df = pd.DataFrame(data)
df.set_index(['城市', '年份'], inplace=True)

# 按城市分組,計(jì)算GDP的總和
grouped_gdp = df.groupby('城市')['GDP'].sum()
print("按城市分組的GDP總和:\n", grouped_gdp)

運(yùn)行以上代碼,輸出結(jié)果:

按城市分組的GDP總和:
城市
北京    73302
上海    77555
廣州    51000
Name: GDP, dtype: int64

在這個(gè)示例中,對(duì)多重索引進(jìn)行了按城市分組,并計(jì)算了每個(gè)城市在不同年份的GDP總和。

3.2 多索引切片操作

Pandas可以使用 slice 對(duì)多重索引進(jìn)行切片操作,這在處理多維數(shù)據(jù)時(shí)非常有用。

import pandas as pd
import numpy as np

# 創(chuàng)建一個(gè)包含多個(gè)級(jí)別的DataFrame
arrays = [
    ['北京', '北京', '北京', '上海', '上海', '廣州', '廣州'],
    [2020, 2021, 2022, 2020, 2021, 2020, 2021]
]
index = pd.MultiIndex.from_arrays(arrays, names=('城市', '年份'))
data = np.random.randn(7, 2)
df = pd.DataFrame(data, index=index, columns=['指標(biāo)1', '指標(biāo)2'])

# 對(duì)多重索引進(jìn)行切片
sliced_df = df.loc[pd.IndexSlice[:, 2021], :]
print("切片后的DataFrame:\n", sliced_df)

運(yùn)行以上代碼,輸出結(jié)果:

切片后的DataFrame:
          指標(biāo)1      指標(biāo)2
城市  年份                   
北京  2021  0.558769  0.722681
上海  2021  0.392982  0.888569
廣州  2021 -0.668413 -0.907221

在這個(gè)示例中,使用 pd.IndexSlice 對(duì)多重索引進(jìn)行了切片操作,選取了所有城市在2021年的數(shù)據(jù)。這種切片操作可以非常方便地從多層級(jí)數(shù)據(jù)中提取出感興趣的部分。

3.3 多重索引的排序

多重索引還可以進(jìn)行排序操作,這在需要按特定順序查看數(shù)據(jù)時(shí)非常有用。

import pandas as pd
import numpy as np

# 創(chuàng)建一個(gè)包含多個(gè)級(jí)別的DataFrame
arrays = [
    ['北京', '北京', '上海', '上海', '廣州', '廣州'],
    [2021, 2020, 2021, 2020, 2021, 2020]
]
index = pd.MultiIndex.from_arrays(arrays, names=('城市', '年份'))
data = np.random.randn(6, 2)
df = pd.DataFrame(data, index=index, columns=['指標(biāo)1', '指標(biāo)2'])

# 對(duì)多重索引進(jìn)行排序
sorted_df = df.sort_index(level=['城市', '年份'], ascending=[True, False])
print("排序后的DataFrame:\n", sorted_df)

運(yùn)行以上代碼,輸出結(jié)果:

排序后的DataFrame:
          指標(biāo)1      指標(biāo)2
城市  年份                   
北京  2021  1.013978  0.731106
    2020 -0.856558  0.696849
上海  2021 -0.585347  0.494768
    2020  0.129116 -0.477598
廣州  2021 -0.542223  1.212357
    2020  0.221365 -0.055147

在這個(gè)示例中,對(duì)多重索引進(jìn)行了排序,按城市名稱升序排列,同時(shí)按年份降序排列。這種排序操作可以以一種更符合分析需求的順序來(lái)查看數(shù)據(jù)。

4.多重索引的實(shí)際應(yīng)用場(chǎng)景

多重索引在許多實(shí)際應(yīng)用中非常有用,特別是在處理時(shí)間序列數(shù)據(jù)、面板數(shù)據(jù)和多維數(shù)據(jù)集時(shí)。

在時(shí)間序列分析中,經(jīng)常需要將日期和其他類別變量(如產(chǎn)品、地區(qū))結(jié)合使用進(jìn)行分析。多重索引可以管理和分析這些數(shù)據(jù)。

import pandas as pd
import numpy as np

# 創(chuàng)建時(shí)間序列數(shù)據(jù)
dates = pd.date_range('2023-01-01', periods=6)
products = ['產(chǎn)品A', '產(chǎn)品B']
index = pd.MultiIndex.from_product([dates, products], names=['日期', '產(chǎn)品'])
data = np.random.randn(12, 2)
df = pd.DataFrame(data, index=index, columns=['銷售額', '利潤(rùn)'])

print("時(shí)間序列數(shù)據(jù)的DataFrame:\n", df)

# 按產(chǎn)品分組計(jì)算總銷售額
total_sales = df.groupby('產(chǎn)品')['銷售額'].sum()
print("\n按產(chǎn)品分組的總銷售額:\n", total_sales)

運(yùn)行以上代碼,輸出結(jié)果:

時(shí)間序列數(shù)據(jù)的DataFrame:
                   銷售額        利潤(rùn)
日期          產(chǎn)品                    
2023-01-01 產(chǎn)品A -0.856051  0.166173
           產(chǎn)品B  0.934522  0.570209
2023-01-02 產(chǎn)品A -0.205493  1.195617
           產(chǎn)品B -1.286157  0.122996
2023-01-03 產(chǎn)品A -1.618019  0.593061
           產(chǎn)品B  0.246715 -0.654644
2023-01-04 產(chǎn)品A  0.158859 -1.404354
           產(chǎn)品B -0.255284  1.383135
2023-01-05 產(chǎn)品A  0.408226  0.799745
           產(chǎn)品B  0.411282  0.339705
2023-01-06 產(chǎn)品A -1.023615 -0.616391
           產(chǎn)品B -1.564080  1.062635

按產(chǎn)品分組的總銷售額:
產(chǎn)品
產(chǎn)品A   -3.136093
產(chǎn)品B   -1.513002
Name: 銷售額, dtype: float64

在這個(gè)示例中,使用多重索引將日期和產(chǎn)品組合在一起,并通過(guò)分組計(jì)算每種產(chǎn)品的總銷售額。

在數(shù)據(jù)分析中,Python Pandas的多重索引功能提供了強(qiáng)大的工具來(lái)處理復(fù)雜的多維數(shù)據(jù)。通過(guò)多重索引,用戶可以將數(shù)據(jù)框分層管理,使得數(shù)據(jù)的選擇、切片、分組和聚合操作更加直觀和高效。多重索引不僅可以在處理時(shí)間序列、面板數(shù)據(jù)和其他多層次數(shù)據(jù)時(shí)更加靈活,還能提升數(shù)據(jù)分析的精度和效率。掌握Pandas的多重索引操作,能夠在面對(duì)復(fù)雜數(shù)據(jù)結(jié)構(gòu)時(shí)更加從容自如。

到此這篇關(guān)于Pandas中多重索引技巧的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Pandas 多重索引內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 對(duì)python指數(shù)、冪數(shù)擬合curve_fit詳解

    對(duì)python指數(shù)、冪數(shù)擬合curve_fit詳解

    今天小編就為大家分享一篇對(duì)python指數(shù)、冪數(shù)擬合curve_fit詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • Python如何實(shí)現(xiàn)均直方圖均衡化

    Python如何實(shí)現(xiàn)均直方圖均衡化

    這篇文章主要介紹了Python如何實(shí)現(xiàn)均直方圖均衡化問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • 淺談Python訪問(wèn)MySQL的正確姿勢(shì)

    淺談Python訪問(wèn)MySQL的正確姿勢(shì)

    這篇文章主要介紹了淺談Python訪問(wèn)MySQL的正確姿勢(shì),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • jmeter中用python實(shí)現(xiàn)請(qǐng)求參數(shù)的隨機(jī)方式

    jmeter中用python實(shí)現(xiàn)請(qǐng)求參數(shù)的隨機(jī)方式

    首先,需下載Jython插件于https://www.jython.org/download后,將其放入JMeter的lib目錄并重啟JMeter,其次,添加JSR223PreProcessor并選擇Python作為語(yǔ)言,編寫腳本,其中metrics_ids3和metrics_weidu3為列表變量
    2024-10-10
  • 剖析Python的Tornado框架中session支持的實(shí)現(xiàn)代碼

    剖析Python的Tornado框架中session支持的實(shí)現(xiàn)代碼

    這篇文章主要介紹了剖析Python的Tornado框架中session支持的實(shí)現(xiàn)代碼,這樣就可以使用Django等框架中大家所熟悉的session了,需要的朋友可以參考下
    2015-08-08
  • Python2.7.10以上pip更新及其他包的安裝教程

    Python2.7.10以上pip更新及其他包的安裝教程

    今天小編就為大家分享一篇Python2.7.10以上pip更新及其他包的安裝教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • python如何生成textgrid文件

    python如何生成textgrid文件

    這篇文章主要介紹了python如何生成textgrid文件,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • python實(shí)現(xiàn)合并兩個(gè)數(shù)組的方法

    python實(shí)現(xiàn)合并兩個(gè)數(shù)組的方法

    這篇文章主要介紹了python實(shí)現(xiàn)合并兩個(gè)數(shù)組的方法,實(shí)例分析了兩種常用的合并數(shù)組的技巧,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下
    2015-05-05
  • python的正則表達(dá)式re模塊的常用方法

    python的正則表達(dá)式re模塊的常用方法

    Python 的 re 模塊(Regular Expression 正則表達(dá)式)提供各種正則表達(dá)式的匹配操作,在文本解析、復(fù)雜字符串分析和信息提取時(shí)是一個(gè)非常有用的工具,下面我主要總結(jié)了re的常用方法
    2013-03-03
  • python批量處理文件或文件夾

    python批量處理文件或文件夾

    這篇文章主要為大家詳細(xì)介紹了python批量處理文件或文件夾,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08

最新評(píng)論