[英]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.