Как эффективно применять методы условных строк, чтобы разделить столбец данных на две части? - PullRequest
0 голосов
/ 23 июня 2019

Я очищаю некоторые данные и хочу условно разбить столбец, значения которого разделены новой строкой. (например, 3t10 \ n5b12) Эти данные существуют либо в column_a, либо column_b, а остальные - NaN. (Для справки столбцами являются qualification_a_group или qualification_b_group. Человек (строка) может быть только в одном.)

Помимо квалификационных столбцов, есть также столбцы final и semi_final (с данными того же типа). Я смог разделить те, которые использовали прикрепленный код, но мне нужно было использовать условие для выбора квалификационного столбца, который не является Nan. Я попробовал второй фрагмент кода ниже, но это дает только если column_a не является нулевым.

'''
# This works
final_split = combined['final'].str.split("\n", n=1, expand=True)
combined['final_tops'] = final_split[0]
combined['final_zones'] = final_split[1]
'''

'''
# This only works for when qualification_a != nan
q1_split = combined['qualification_a'].str.split("\n", n=1, expand=True)
q2_split = combined['qualification_b'].str.split("\n", n=1, expand=True)

combined['qualification_tops'] = q1_split[0].where(q1_split[0] != np.nan, 
other=q2_split[0])
combined['qualification_zones'] = q1_split[1].where(q1_split[0] != 
np.nan, other=q2_split[1])
'''

Я считаю, что это связано с тем, что метод не повторяет каждую строку, и что мне нужно использовать цикл for для анализа столбца квалификации, в отличие от final и semi_final. Это правильно, или я делаю что-то не так с самого начала, и если так с первым, какой самый эффективный / питонный способ добиться этого? Спасибо.

1 Ответ

0 голосов
/ 23 июня 2019

Разобрался! Я использовал np.where вместо df.where, который работал как шарм. Код выглядит следующим образом:

''''
combined['qualification_tops'] = np.where(q1_split[0].isnull(), q2_split[0], q1_split[0])
combined['qualification_zones'] = np.where(q1_split[0].isnull(), q2_split[1], q1_split[1])
''''
...