給定具有多索引列的數(shù)據(jù)幀import pandas as pdfish = [("Fish", lli) for lli in ["One", "Two"]]dogs = [("Dog", lli) for lli in ["Three", "Four", "Five"]]cats = [("Cat", lli) for lli in ["Three", "Four", "Five"]]df = pd.DataFrame(index=["Blue", "Green", "Red"], columns=pd.MultiIndex.from_tuples(fish+dogs+cats))-df = Fish Dog Cat One Two Three Four Five Three Four Five Blue NaN NaN NaN NaN NaN NaN NaN NaN Green NaN NaN NaN NaN NaN NaN NaN NaN Red NaN NaN NaN NaN NaN NaN NaN NaN現(xiàn)在我想同時(shí)設(shè)置兩列的值,例如df.loc[:, ('Dog', ['Four', 'Five'])] = 3.1這導(dǎo)致了一個(gè)KeyError說KeyError: 'MultiIndex Slicing requires the index to be fully lexsorted tuple len (2), lexsort depth (0)'該問題可以通過在設(shè)置值之前對列進(jìn)行排序來“解決”df = df.sort_index(axis=1)現(xiàn)在的問題是我不想對列進(jìn)行排序,因?yàn)樗鼈円呀?jīng)以反映所需輸出的方式排序。有沒有辦法在不先排序的情況下設(shè)置多個(gè)列的值?
1 回答

呼喚遠(yuǎn)方
TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超11個(gè)贊
它在上一個(gè)版本的熊貓中工作得很好。
如果無法升級,可以升級pandas,可以通過Index.get_level_values
和Index.isin
創(chuàng)建的掩碼選擇級別,并設(shè)置如下值:
m1 = df.columns.get_level_values(0) == 'Dog'
m2 = df.columns.get_level_values(1).isin(['Four','Five'])
df.loc[:, m1 & m2] = 3.1
print (df)
Fish Dog Cat
One Two Three Four Five Three Four Five
Blue NaN NaN NaN 3.1 3.1 NaN NaN NaN
Green NaN NaN NaN 3.1 3.1 NaN NaN NaN
Red NaN NaN NaN 3.1 3.1 NaN NaN NaN
添加回答
舉報(bào)
0/150
提交
取消