簡體   English   中英

從pandas DataFrame MultiIndex中選擇命名索引級別

[英]Select named index level from pandas DataFrame MultiIndex

我創建了一個數據框:

df1 = pandas.read_csv(ifile_name,  header=None,  sep=r"\s+",  usecols=[0,1,2,3,4],
                              index_col=[0,1,2], names=["year", "month", "day", "something1", "something2"])

現在我想創建另一個年份> 2008的數據框。 因此我試過:

df2 = df1[df1.year>2008]

但得到錯誤:

AttributeError: 'DataFrame' object has no attribute 'year'

我猜,它沒有看到列中的“年份”,因為我在索引中定義了它。 但是,在這種情況下,如何根據年份> 2008獲取數據?

使用MultiIndex.get_level_values按名稱獲取級別,並為行選擇創建一個布爾掩碼:

df2 = df1[df1.index.get_level_values('year') > 2008]

如果您打算進行修改,請創建df1的副本,以便不對視圖進行操作。

df2 = df1[df1.index.get_level_values('year') > 2008].copy()

你是正確的year是一個索引而不是一個列。 一種解決方案是使用pd.DataFrame.query ,它允許您直接使用索引名稱:

df = pd.DataFrame({'year': [2005, 2010, 2015], 'value': [1, 2, 3]})
df = df.set_index('year')

res = df.query('year > 2008')

print(res)

      value
year       
2010      2
2015      3

假設您的索引已排序

df.loc[2008:]
Out[259]: 
      value
year       
2010      2
2015      3

暫無
暫無

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

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