使用Python的列映射

2024-09-28 17:05:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧,第一个有1000行,看起来像:

    Date        tri23_1   hsgç_T2   bbbj-1Y_jn   Family       Bonus
2011-06-09      qwer        1           rits      Laavin        456
2011-07-09       ww         43          mayo      Grendy        679
2011-09-10       wwer       44          ramya     Fantol        431
2011-11-02                  5           sam       Gondow        569

第二个数据框包含所有唯一值以及与这些值关联的酒店:

Group             Hotel
tri23_1           Jamel
hsgç_T2           Frank
bbbj-1Y_jn        Luxy
mlkl_781          Grand Hotel
vchs_94           Vancouver

我的目标是将第一个数据帧的列替换为第二个数据帧的列Hotel的相应值,输出应如下所示:-

    Date        Jamel     Frank           Luxy     Family       Bonus
2011-06-09      qwer        1           rits       Laavin        456
2011-07-09       ww         43          mayo       Grendy        679
2011-09-10       wwer       44          ramya      Fantol        431
2011-11-02                  5           sam        Gondow        569

我可以使用python实现这一点吗


Tags: 数据datefamilyhoteljnwwt2mayo
1条回答
网友
1楼 · 发布于 2024-09-28 17:05:31

您可以使用^{}尝试以下操作:

df1.columns=[df2.set_index('Group').to_dict()['Hotel'][i] if i in df2.set_index('Group').to_dict()['Hotel'].keys() else i for i in df1.columns]
print(df1)

输出:

df1
         Date tri23_1 hsgç_T2 bbbj-1Y_jn  Family  Bonus
0  2011-06-09    qwer       1       rits  Laavin  456.0
1  2011-07-09      ww      43       mayo  Grendy  679.0
2  2011-09-10    wwer      44      ramya  Fantol  431.0
3  2011-11-02               5        sam  Gondow  569   

df2
        Group        Hotel
0     tri23_1        Jamel
1     hsgç_T2        Frank
2  bbbj-1Y_jn         Luxy
3    mlkl_781  Grand Hotel
4     vchs_94    Vancouver

df1 changed
         Date Jamel Frank    Luxy  Family  Bonus
0  2011-06-09  qwer     1    rits  Laavin  456.0
1  2011-07-09    ww    43    mayo  Grendy  679.0
2  2011-09-10  wwer    44   ramya  Fantol  431.0
3  2011-11-02          5      sam  Gondow  569

更新:说明

首先,如果df2['Group']不是df2的索引,我们将其设置为索引

然后将数据帧传递给dict:

df2.set_index('Group').to_dict()

>>>{'Hotel': {'tri23_1': 'Jamel', 'hsgç_T2': 'Frank', 'bbbj-1Y_jn': 'Luxy', 'mlkl_781': 'Grand Hotel', 'vchs_94': 'Vancouver'}}

然后我们选择key'Hotel'的值

df2.set_index('Group').to_dict()['Hotel']

>>>{'tri23_1': 'Jamel', 'hsgç_T2': 'Frank', 'bbbj-1Y_jn': 'Luxy', 'mlkl_781': 'Grand Hotel', 'vchs_94': 'Vancouver'}

然后逐列搜索字典中的值,如果字典的键中没有该列,我们只返回相同的值,例如日期、家庭、奖金:

i='Date'
i in df2.set_index('Group').to_dict()['Hotel'].keys  ->False
return 'Date'
...
i='tri23_1'
i in df2.set_index('Group').to_dict()['Hotel'].keys  ->True
return df2.set_index('Group').to_dict()['Hotel']['tri23_1']
...
...
#And so on...

相关问题 更多 >