Изменить столбец панд на основе другого столбца - PullRequest
1 голос
/ 20 марта 2019

У меня есть DataFrame pandas, который выглядит следующим образом:

A         A_type
"Hello"   String
15        Integer
"Hi"      String
56.78     Float

Я хочу создать третий столбец, который сообщает то же значение, что и A, если A имеет соответствующий элемент "A_type" с именем "String"в противном случае выведите «blank».Столбец будет выглядеть так:

B
"Hello"
"blank"
"Hi"
"blank"

Я пытался сделать что-то вроде:

df['B'] = df['A']
for j in df['A_type']:
    for i in df['B']:
            if j == "String":
                i = i
            else:
                i = "blank"

Есть ли более эффективный подход к такой проблеме, который может помочь мне избежать всех этих циклов for?

Заранее большое спасибо

Ответы [ 3 ]

2 голосов
/ 20 марта 2019

Использование Series.where или Series.mask с перевернутым условием или numpy.where:

df['B'] = df['A'].where(df['A_type'] == "String", 'blank')
#df['B'] = df['A'].mask(df['A_type'] != "String", 'blank')
#alternative
#df['B'] = np.where(df['A_type'] == "String", df['A'], 'blank')
print (df)
       A   A_type      B
0  Hello   String  Hello
1     15  Integer  blank
2     Hi   String     Hi
3  56.78    Float  blank
0 голосов
/ 20 марта 2019

Также вы можете попробовать:

df['B'] = df.apply(lambda x: x['A'] if x['A_type'] == 'String' else "Blank", axis = 1)
0 голосов
/ 20 марта 2019
df['B']=df['A'].copy()
df.loc[df['A_type']!="String", 'B'] = "blank"

O / P:

       A  A_type      B
0  Hello  String  Hello
1  blank   blank  blank
2     Hi  String     Hi
3  blank   blank  blank

объяснение:

  1. Возьмите копию Col A
  2. , только обновите значение до blank где A_Type не String
...