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

鉴于以下情况:


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


森林海
浏览 123回答 1
1回答

阿波罗的战车

您可以使用列名创建元组,然后将匹配字典与第二个参数一起用作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 two31     2   2   2     2    2    2     2    2    23     4   4   4     4    4    4     4    4    4测试字典中是否没有匹配的外键reps: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 two31     2  2  2     2    2    2     2    2    23     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 two31     2   2  2     2    2    2     2    2    23     4   4  4     4    4    4     4    4    4
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python