[英]How to replace values in a pandas multiindex column set
鑒於以下情況:
dd = {}
for i in range(3):
for j in range(3):
key = (f"col_{i}", j)
dd[key] = {1: 2, 3: 4}
print(pd.DataFrame.from_dict(dd))
看起來像:
col_0 col_1 col_2
0 1 2 0 1 2 0 1 2
1 2 2 2 2 2 2 2 2 2
3 4 4 4 4 4 4 4 4 4
我想使用以下替代品:
reps = {
"col_0": {0: "o", 1: "one", 2: "two"},
"col_1": {0: "o2", 1: "one2", 2: "two2"},
"col_2": {0: "o3", 1: "one3", 2: "two3"},
}
這樣col_0
, col_1
, col_2
不變,但0,1,2
的第二級分別更改為o, one, two
, o2, one2, two2
和o3, one, two3
,給出類似於:
col_0 col_1 col_2
o one two o2 one2 two2 o3 one3 two3
1 2 2 2 2 2 2 2 2 2
3 4 4 4 4 4 4 4 4 4
您可以使用列名創建元組,然后使用匹配字典get
默認值的第二個參數,因此如果不匹配則不替換:
L = [(a, reps[a].get(b, b)) if a in reps else (a, b) for a, b in df.columns.tolist()]
df.columns = pd.MultiIndex.from_tuples(L)
print (df)
col_0 col_1 col_2
o one two o2 one2 two2 o3 one3 two3
1 2 2 2 2 2 2 2 2 2
3 4 4 4 4 4 4 4 4 4
測試reps
dict 中是否沒有匹配的外部鍵:
reps = {
"col_100": {0: "o", 1: "one", 2: "two"},
"col_1": {0: "o2", 1: "one2", 2: "two2"},
"col_2": {0: "o3", 1: "one3", 2: "two3"},
}
L = [(a, reps[a].get(b, b)) if a in reps else (a, b) for a, b in df.columns.tolist()]
df.columns = pd.MultiIndex.from_tuples(L)
print (df)
col_0 col_1 col_2
0 1 2 o2 one2 two2 o3 one3 two3
1 2 2 2 2 2 2 2 2 2
3 4 4 4 4 4 4 4 4 4
測試是否沒有匹配的內部鍵:
reps = {
"col_0": {100: "o", 1: "one", 20: "two"},
"col_1": {0: "o2", 1: "one2", 2: "two2"},
"col_2": {0: "o3", 1: "one3", 2: "two3"},
}
L = [(a, reps[a].get(b, b)) if a in reps else (a, b) for a, b in df.columns.tolist()]
df.columns = pd.MultiIndex.from_tuples(L)
print (df)
col_0 col_1 col_2
0 one 2 o2 one2 two2 o3 one3 two3
1 2 2 2 2 2 2 2 2 2
3 4 4 4 4 4 4 4 4 4
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.