您可能需要以不同的方式建立自己的「切片列表」一點比你預期的,但這裏的使用df.merge()
和df.ix[]
比較緊湊的方法:
# Build a "query" dataframe
slice_df = pd.DataFrame(index=[['foo','qux','qux'],['a','a','b']])
# Explicitly name columns
column_slice = ['A','B']
slice_df.merge(df, left_index=True, right_index=True, how='inner').ix[:,column_slice]
Out[]:
A B
foo a 0.442302 -0.949298
qux a 0.425645 -0.233174
b -0.041416 0.229281
此方法還需要你明確關於你的第二個索引和專欄,不幸的是。但是,如果你問得很好,電腦很適合爲你製作冗長繁瑣的清單。
編輯 - 動態構建可以像上面一樣使用的切片列表的方法示例。
這裏有一個函數,它接受一個數據幀並且吐出一個列表,然後可以用它來創建一個「查詢」數據框來分割原始數據。它只適用於具有1或2個索引的數據幀。讓我知道如果這是一個問題。
def make_df_slice_list(df):
if df.index.nlevels == 1:
slice_list = []
# Only one level of index
for dex in df.index.unique():
if input("DF index: " + dex + " - Include? Y/N: ") == "Y":
# Add to slice list
slice_list.append(dex)
if df.index.nlevels > 1:
slice_list = [[] for _ in xrange(df.index.nlevels)]
# Multi level
for i in df.index.levels[0]:
print "DF index:", i, "has subindexes:", [dex for dex in df.ix[i].index]
sublist = input("Enter a the indexes you'd like as a list: ")
# if no response, the first entry
if len(sublist)==0:
sublist = [df.ix[i].index[0]]
# Add an entry to the first index list for each sub item passed
[slice_list[0].append(i) for item in sublist]
# Add each of the second index list items
[slice_list[1].append(item) for item in sublist]
return slice_list
我不建議這樣的方式與您的用戶,只需一個例子來溝通。當您使用它時,必須在提示時傳遞字符串(例如"Y"
和"N"
)以及字符串列表(["a","b"]
)和空列表[]
。例如:
In [115]: slice_list = make_df_slice_list(df)
DF index: foo has subindexes: ['a', 'b']
Enter a the indexes you'd like as a list: []
DF index: qux has subindexes: ['a', 'b']
Enter a the indexes you'd like as a list: ['a','b']
In [116]:slice_list
Out[116]: [['foo', 'qux', 'qux'], ['a', 'a', 'b']]
# Back to my original solution, but now passing the list:
slice_df = pd.DataFrame(index=slice_list)
column_slice = ['A','B']
slice_df.merge(df, left_index=True, right_index=True, how='inner').ix[:,column_slice]
Out[117]:
A B
foo a -0.249547 0.056414
qux a 0.938710 -0.202213
b 0.329136 -0.465999
slice_2意味着在第二個索引(例如a,b)或第一個索引(foo,qux)上進行切片? –
只是第二個。 – bluprince13
您可以從這裏啓發,其中eval用於數據框中的多個條件:http://stackoverflow.com/questions/33699886/filtering-dataframes-in-pandas-use-a-list-of-conditions – WNG