python - 根据其他列中的条件替换 pandas 列中的某些特定值

标签 python pandas

这是我在 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 中的值,否则保留原始值。

最佳答案

首先使用 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

关于python - 根据其他列中的条件替换 pandas 列中的某些特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35919907/

相关文章:

numpy - 对非常大的一维数组进行排序

python - 从多索引数据框中选择列,例如制作直方图

pandas - 如何使用 key :value pairs from a dict to build a pandas filter

python - 删除&q;并使用 json.loads 函数加载字符串

python - 在 INSERT 中使用 WHERE … ON CONFLICT …

python - Django / python : How to cast an integer into the equivalent enum string?

python - 在python 2.7中获取时差

ubuntu 上的 Python 无法识别当前包

python - 基于新数据框构建数据框

python - 使用附加列识别重复的行