关于python:按关键字重命名pandas中的多个列

rename multiple columns in pandas by keyword

本问题已经有最佳答案,请猛点这里访问。

我需要重命名pandas中的列,以便与预定义关键字关联的几个不同的列名称的标题被该关键字替换。

我希望几个不同的潜在列名的列表与一个关键字相关联,然后我可以用它来对信息进行分组。在重命名pandas中的列时不是这样的问题,因为这不解决可以与一个关键字关联的多个列名称的使用问题。

例如:猫、狗、鸟、鱼->被标题"动物"取代。

我在这里和这里研究了rename函数,但是,它似乎没有考虑到将多个列关联到要重命名的关键字的可能性。

这是熊猫的姿势吗?

到目前为止,我的(不工作的)尝试如下:

1
2
3
4
newNames = {
    'animals':['cats','dogs','fish'],
    'colors':['red','blue','green']
}

样品DF:

1
2
3
4
5
6
cats    dogs    fish    red
1   2   3   2
2   3   5   4
3   4   3   4

df.rename(index=str,columns=newNames,inplace=True)

期望结果:

1
2
3
4
animals     animals     animals     colors
1   2   3   2
2   3   5   4
3   4   3   4


iiuc,你可以考虑使用MultiIndexing,作为对许多列使用相同名称的替代方法(这可能是个坏主意)。

例如:

1
2
3
4
categories = {"animals": ["cats","dogs","fish"],
             "colors" : ["red"]}

df.columns = pd.MultiIndex.from_tuples([(k, sub) for k,v in categories.items() for sub in v])

那么,您的输出将类似于:

1
2
3
4
5
6
        animals                 colors

        cats    dogs    fish    red
0       1       2       3       2
1       2       3       5       4
2       3       4       3       4

使用melt创建口述

1
2
3
4
5
6
df.rename(columns=pd.DataFrame(newNames).melt().set_index('value').variable.to_dict())
Out[275]:
   animals  animals  animals  colors
0        1        2        3       2
1        2        3        5       4
2        3        4        3       4


这对你有用吗?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import pandas as pd
df = pd.DataFrame({"cats": [1, 2, 3],"dogs": [4, 5, 6],"fish": [7, 8, 9],"red": [10, 11, 12],})

# df
   cats  dogs  fish  red
0     1     4     7   10
1     2     5     8   11
2     3     6     9   12

new_names = {
   "cats":"animals",
   "dogs":"animals",
   "fish":"animals",
   "red":"colors"
    }

new_df = df.rename(index=str, columns=new_names)

# new_df
   animals  animals  animals  colors
0        1        4        7      10
1        2        5        8      11
2        3        6        9      12

如果列名称没有在new_names字典中列出,那么它只是保持不变。在这种情况下,数据帧的维数并不重要。

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
df2 = pd.DataFrame({"cats": [1, 2, 3],"digs": [4, 5, 6],"fish": [7, 8, 9],"worm": [10, 11, 12],"blue": [10, 11, 12]})

# df2
   cats  digs  fish  worm  blue
0     1     4     7    10    10
1     2     5     8    11    11
2     3     6     9    12    12

new_df2 = df2.rename(index=str, columns=new_names)

# new_df2
   animals  digs  animals  worm  blue
0        1     4        7    10    10
1        2     5        8    11    11
2        3     6        9    12    12