python - 当列等于特定值时,将新值插入新列 - Python

标签 python pandas where-clause

我正在尝试创建一个新的,其中包含基于单独中的值的值。具体来说,对于下面的 df,其中 ['Val'] == 'A','B','C' 中的值我想插入 ' X'['New_Val']。与 'D','E','F' 类似,但插入 'Y'

import pandas as pd

d = ({
    'Val' : ['A','B','C','D','E','F'],                                     
     })

df = pd.DataFrame(data = d)

Xs = ['A','B','C']
Ys = ['D','E','F']

df['New_Val'] = df.loc['New_Val'].loc[df['Val'] == Xs] = 'X'
df['New_Val'] = df.loc['New_Val'].loc[df['Val'] == Ys] = 'Y'

预期输出:

  Val New_Val
0   A       X
1   B       X
2   C       X
3   D       Y
4   E       Y
5   F       Y

最佳答案

使用Series.map按字典:

#specify values
d = {'X':Xs, 'Y':Ys}
print (d)
{'X': ['A', 'B', 'C'], 'Y': ['D', 'E', 'F']}

#swap key values in dict of lists
#http://stackoverflow.com/a/31674731/2901002
d1 = {k: oldk for oldk, oldv in d.items() for k in oldv}
print (d1)
{'A': 'X', 'B': 'X', 'C': 'X', 'D': 'Y', 'E': 'Y', 'F': 'Y'}


df['New_Val'] = df['Val'].map(d1)
print (df)
  Val New_Val
0   A       X
1   B       X
2   C       X
3   D       Y
4   E       Y
5   F       Y

关于python - 当列等于特定值时,将新值插入新列 - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55605482/

相关文章:

python - 作业 : Implementing the Z algorithm in python, 真的很慢,比单纯的字符串搜索还慢

python - 使用 NumPy 就地反转矩阵

Python:如何删除 CSV 文件中单独出现的句点?

python - 从 Pandas 中的索引中检索列的名称

python - 通过文本行搜索的正确方法,re.findall() 和 re.search() 都不能完全工作

php - 使用 PHP 在 mysql 中删除不起作用

python - 运行子进程时检查条件

python - 如何将同一类别的多行合并为 Pandas 中的一行?

MySQL 执行时间过长

mysql - Mysql中的条件where子句