[英]Appending a multi-indexed column to the index of a DataFrame
我生成了一個稱為df的初始數據幀,然后生成了一個名為df_new的調整后的數據幀。
我希望使用set_index()操作從df轉換為df_new。 我的問題是如何協商列上的層次結構索引
import pandas as pd
import numpy as np
df = pd.DataFrame(np.ones((5,5)))
col_idx = pd.MultiIndex.from_tuples([('X','a'),('X','b'),('Y','c'),('Y','d'),('Y','e')])
row_idx = ['a1','a2','a3','a4','a5']
df.columns = col_idx
df.index = row_idx
idx = pd.IndexSlice
df.loc[:,idx['Y','d']] = 99
print df.head()
X Y
a b c d e
a1 1 1 1 99 1
a2 1 1 1 99 1
a3 1 1 1 99 1
a4 1 1 1 99 1
a5 1 1 1 99 1
#------------------------------------------------------------------------------------------
df_new = pd.DataFrame(np.ones((5,4)))
col_idx = pd.MultiIndex.from_tuples([('X','a'),('X','b'),('Y','c'),('Y','e')])
row_idx = pd.MultiIndex.from_tuples([('a1',99),('a2',99),('a3',99),('a4',99),('a5',99)])
df_new.columns = col_idx
df_new.index = row_idx
print df_new.head()
# this is what df_new should look like.
# ('Y','d') got appended to the row index.
X Y
a b c e
a1 99 1 1 1 1
a2 99 1 1 1 1
a3 99 1 1 1 1
a4 99 1 1 1 1
a5 99 1 1 1 1
您可以使用元組符號來表示多索引列中的一列(並且需要append=True
才能不替換現有索引):
In [34]: df.set_index(('Y', 'd'), append=True)
Out[34]:
X Y
a b c e
(Y, d)
a1 99 1 1 1 1
a2 99 1 1 1 1
a3 99 1 1 1 1
a4 99 1 1 1 1
a5 99 1 1 1 1
如果要刪除索引名稱,可以執行以下操作:
In [42]: df2 = df.set_index(('Y', 'd'), append=True)
In [43]: df2.index.names = [None, None]
In [44]: df2
Out[44]:
X Y
a b c e
a1 99 1 1 1 1
a2 99 1 1 1 1
a3 99 1 1 1 1
a4 99 1 1 1 1
a5 99 1 1 1 1
要向索引添加多個列時,必須使用列名稱列表(在本例中為元組):
df.set_index([('Y', 'd'), ('Y', 'e')], append=True)
DataFrame.set_index方法采用append關鍵字參數,因此您可以像這樣簡單地進行操作:
df_new = df.set_index(("Y", "d"), append=True)
如果要添加多個列,只需將它們作為列表提供:
df_new = df.set_index([("Y", "d"), ("Y", "e")], append=True)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.