簡體   English   中英

如何替換 pandas 多索引列集中的值

[英]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, two2o3, 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.

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