【问题标题】:Replace some specific values in pandas column based on conditions in other column根据其他列中的条件替换 pandas 列中的某些特定值
【发布时间】:2016-03-10 23:04:36
【问题描述】:

这是我在 StackOverflow 上的第一个问题,所以请告诉我是否应该用不同的方式表述...

我想替换 pandas Dataframe 列中的一些值,这取决于与另一列中的值相关的条件,但如果条件为 False,则保留原始值。例如:

import pandas as pd    
df=pd.DataFrame({'col1':['A','B','C','B'], 'col2':['z','x','x','x']},
                  columns=['col1','col2'])

df =
   col1 col2
0    A    z
1    B    x
2    C    x
3    B    x

说,如果 col1 中的值为 'B' 或 'C',我想将 col2 中的值替换为 'q',但保留原始值('z','x'),如果col1 不是 B 或 C。实际上,我有更大的 DataFrame,col1 中有数百个唯一值,并且希望将 col2 中的值替换为其中的大约 20 个。
我目前的解决方案是创建一个字典,使用 col1 作为键,使用 col2 作为值,然后:

dict1.update({'B':'q'})
df[col2] = df[col1].map(dict1)

但这个技巧只有在两列中的值完全相关时才有效(或者如果 col1 中的值是唯一的)。

所以我想知道是否有更优雅的解决方案。因此,如果 col1 满足某个条件,则仅替换 col2 中的值,否则保留原始值。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    首先使用locisin 屏蔽df,然后像以前一样调用map

    In [376]:
    dict1 = {'B':'q'}
    df.loc[df['col1'].isin(dict1.keys()), 'col2'] = df['col1'].map(dict1)
    df
    
    Out[376]:
      col1 col2
    0    A    z
    1    B    q
    2    C    x
    3    B    q
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-12
      • 2020-01-04
      • 1970-01-01
      • 2020-09-25
      • 2021-08-06
      • 1970-01-01
      • 2018-09-15
      • 1970-01-01
      相关资源
      最近更新 更多