通过匹配列/索引名称,使用另一个数据框中的字符串值重命名Python中的数据框列

问题描述 投票:0回答:1

主要编辑:

显然我的问题很难理解,所以我会尽力具体化。

我有两个数据框,“df1”和“df2”。它们相当大,比下面的代码块大,所以我想自动化重命名过程以使名称匿名。

第一个 df1 在其索引中包含的名称如下:

                                 Yearly energy consumption    Size rating
Almtunaskolan                                322149.324250  Medium school
Almunge skola                                383479.065917  Medium school
Bergaskolan (Videskolan)                     296916.405000  Medium school
Danmarks skola                                84884.857333   Small school
Domarringens skola                           463568.627250   Large school
Ekuddens skola                               177668.365000   Small school

在此数据框中,每个用户名(位于索引中)在第二列“大小评级”中都有一个大小评级。我想使用此评级来重命名 another 数据帧 df2 中的用户名。

另一个 df2 的名称较少,因为与 df1 中的索引相比,有些名称已被过滤掉。但是df2中的所有列名都存在于df1中的索引名称中。不同之处在于,这里的用户名位于列中,如下所示 df2:

                 datetime  Almtunaskolan  Almunge skola  ... Real user name ... Real user name ... \
24    2017-01-02 00:00:00       0.001268       0.000579   
25    2017-01-02 01:00:00       0.001257       0.000591   
26    2017-01-02 02:00:00       0.001257       0.000583   
27    2017-01-02 03:00:00       0.001257       0.000587   
28    2017-01-02 04:00:00       0.001268       0.000583  

现在的问题是:如何使用 df1 中的“大小评级”为每个用户重命名 df2 中的列?

例如,在 df1 中,第一行有“Almtunaskolan”,这也是 df2 中第一列的用户。所以我想将 df2 中第一列中的“Almtunaskolan”重命名为“Medium school”等

也就是说,我想让它看起来像这样:

                 datetime  Medium school  Medium school  ... Small school ... Large school... \
24    2017-01-02 00:00:00       0.001268       0.000579   
25    2017-01-02 01:00:00       0.001257       0.000591   
26    2017-01-02 02:00:00       0.001257       0.000583   
27    2017-01-02 03:00:00       0.001257       0.000587   
28    2017-01-02 04:00:00       0.001268       0.000583  

请注意,df2 中的用户较少,即 df2 中的列数少于 df1 中的索引数。

我怎样才能实现这个目标:x 我距离 Pandas 的专业人士还很远,但是像这样的事情甚至很难开始......

我尝试了不同的 df.renaming 选项,或使用 fidning df2.columns == df1.index 的 for 循环,以及一些字典或映射,但我无法使它们工作

python dataframe rename string-matching
1个回答
0
投票

您可以从 df1 生成一个字典,然后使用它来使用

map()
更改 df2 中的列名称,如下面的简化示例所示:

import pandas as pd

df1= pd.DataFrame({'x': ['a','b'],
                 'y': [1, 2],
                 'z': ['name1', 'name2']
                  })

df1 = df1.set_index('x')

df2 = pd.DataFrame({'a': [1, 2, 3],
                   'b': [3, 4, 5]
                   })
print(df1,'\n')
print(df2,'\n')

change = df1['z'].to_dict()
df2.columns = df2.columns.map(change)

print(df2)

打印

   y      z
x          
a  1  name1
b  2  name2 

   a  b
0  1  3
1  2  4
2  3  5 

   name1  name2
0      1      3
1      2      4
2      3      5
© www.soinside.com 2019 - 2024. All rights reserved.