我有以下 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)
。
最佳答案
您可以使用 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
关于python - 如何更改或访问 pandas MultiIndex 列标题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37369317/