【问题标题】:Replace dummy values in multiple columns with corresponding string values from another pandas dataframe将多列中的虚拟值替换为来自另一个 pandas 数据帧的相应字符串值
【发布时间】:2020-12-02 17:08:17
【问题描述】:

我有两个 pandas 数据帧,第二个数据帧具有我从第一个提取的虚拟值,如下所示:

df1
    Col_0   Col_1   Col_2   Col_3    ...Col_27
0   A       535     C       Mission
1   A       536     C       Mission
2   A       541     C       Fair Oaks
3   A       5455    C       Valley
4   A       55      C       Sunset
5   A       55      C       Green
6   B       West    C       4th
7   B       East    C       Bainbridge
8   C       Pearl   B       West
9   C       Main    B       South
10  C       First   C       Allen

df2 = pd.get_dummies(df1[['Col_0', 'Col_2', 'Col_4', 'Col_6', 'Col_8', 'Col_10', 'Col_12', 'Col_14', 'Col_16', 'Col_18', 'Col_20', 'Col_22','Col_24', 'Col_26']])
df2
    Col_0_A Col_0_B Col_0_C Col_2_B Col_2_C ...Col__26_E
0   1       0       0       0       1
1   1       0       0       0       1
2   1       0       0       0       1
3   1       0       0       0       1
4   1       0       0       0       1
5   1       0       0       0       1
6   0       1       0       0       1
7   0       1       0       0       1
8   0       0       1       1       0
9   0       0       1       1       0
10  0       0       1       0       1


df3
    A     B     C       B      C         ...E
0   535                        Mission
1   536                        Mission
2   541                        Fair Oaks
3   5455                       Valley
4   55                         Sunset
5   55                         Green
6         West                 4th
7         East                 Bainbridge
8               Pearl   West    
9               Main    South   
10              First          Allen

我需要创建另一个数据框 df3,其中 df2 中的 1 被 df1 Col_1、Col_3 等中的值替换。 df2 中的列具有 df1 中相应列的前缀。 Df1 上升到 Col_27,所以想象一下 df2 有 150 列和 25,000 行。我已经做到了这一点,但不知道如何将这两者映射在一起。希望这一切都有意义。谢谢

【问题讨论】:

    标签: python pandas dummy-variable dummy-data


    【解决方案1】:

    从一开始就创建列对

    df=pd.concat([df1[x].str.get_dummies().mul(df1[y],axis=0)  for x , y in zip(df1.columns[::2],df1.columns[1::2])],axis=1) 
    Out[135]: 
           A     B      C      B           C
    0    535                         Mission
    1    536                         Mission
    2    541                        FairOaks
    3   5455                          Valley
    4     55                          Sunset
    5     55                           Green
    6         West                       4th
    7         East                Bainbridge
    8               Pearl   West            
    9                Main  South            
    10              First              Allen
    

    【讨论】:

      猜你喜欢
      • 2015-10-23
      • 2021-05-22
      • 1970-01-01
      • 1970-01-01
      • 2020-06-03
      • 2019-07-10
      • 2018-02-03
      • 2015-06-27
      相关资源
      最近更新 更多