簡體   English   中英

如何更改或訪問pandas MultiIndex列標題?

[英]How do I change or access pandas MultiIndex column headers?

我有以下Pandas DataFrame,但是無法更新列標題值,或者很容易訪問標題值(例如,用於在標題中繪制(lon,lat)位置的時間)。

df = pd.DataFrame(columns = ["id0", "id1", "id2"])
df.loc[2012]= [24, 25, 26]
df.loc[2013]= [28, 28, 29]
df.loc[2014]= [30, 31, 32]

df.columns = pd.MultiIndex.from_arrays([df.columns, [66,67,68], [110,111,112]],
                                       names=['id','lat','lon'])

然后看起來像這樣:

>>> df
id     id0   id1   id2
lat     66    67    68
lon    110   111   112
2012  24.0  25.0  26.0
2013  28.0  28.0  29.0
2014  30.0  31.0  32.0

我希望能夠調整df['id0']的緯度或經度,或plot(df.ix[2014])但在(x,y)位置調整(lon,lat)

您可以通過元組訪問MultiIndex 例如:

df.loc[:, ('id0', 66, 110)]

但是,您可能希望通過lon / lat訪問而不指定id,或者您可能有多個ID。 在這種情況下,你可以做兩件事。

首先,使用pd.IndexSlice ,它允許有用的MultiIndex切片:

df.loc[:, pd.IndexSlice[:, 66, 110]]

第二:

df.stack(0).loc[:, (66, 110)].dropna().unstack()

哪個更麻煩,但可能有用。

最后,你提到的最后一件事。 對於具有lon / lat的特定行。

df.loc[2014, pd.IndexSlice[:, 66, 110]]

您可以使用df.columns.get_level_values('lat')來獲取索引對象。 這將返回索引的副本,因此您無法擴展此方法來修改原位坐標。

但是,您可以直接訪問級別並使用此變通方法在內部修改它們。

import pandas as pd
import numpy as np

df = pd.DataFrame(columns = ["id0", "id1", "id2"])
df.loc[2012]= [24, 25, 26]
df.loc[2013]= [28, 28, 29]
df.loc[2014]= [30, 31, 32]

df.columns = pd.MultiIndex.from_arrays([df.columns, [66,67,68], [110,111,112]],
                                       names=['id','lat','lon'])

ids = df.columns.get_level_values('id')
id_ = 'id0'
column_position = np.where(ids.values == id_)

new_lat = 90
new_lon = 0

df.columns._levels[1].values[column_position] = new_lat
df.columns._levels[2].values[column_position] = new_lon

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM