Если столбец равен определенному значению, вставьте новое значение в новый столбец - Python - PullRequest
1 голос
/ 10 апреля 2019

Я пытаюсь создать новый column, который содержит значения, основанные на значениях в отдельном column. В частности, для 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

1 Ответ

1 голос
/ 10 апреля 2019

Использовать 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
...