为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

森林海 2023-05-16 15:09:17
鉴于以下情况: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  21     2  2  2     2  2  2     2  2  23     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  two31     2  2    2      2  2    2        2    2     23     4  4    4      4  4    4        4    4     4
查看完整描述

1 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

您可以使用列名创建元组,然后将匹配字典与第二个参数一起用作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:


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


查看完整回答
反对 回复 2023-05-16
  • 1 回答
  • 0 关注
  • 122 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信