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,你可以考虑使用
例如:
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 |
使用
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 |
如果列名称没有在
例子:
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 |