Условно назначить несколько столбцов другому DataFrame (условие определяет, какой набор столбцов в этой строке назначен) - PullRequest
0 голосов
/ 18 февраля 2020

Мне нужно переформатировать некоторые данные. Я никогда раньше не использовал pandas и мог бы использовать некоторую помощь.

У меня есть два кадра данных: df1 dfTarget

df1 - это неформатированные данные, dfTarget - то, как мне нужны данные для форматирования

Исходя из условия, мне нужно скопировать одну группу столбцов в df1 в определенные столбцы в dfTarget. Если условие ложно, мне нужно скопировать другую группу столбцов в df1 в определенные столбцы в dfTarget.

Упрощенный df1:

    city   state   condition   city2   state2
0
1
2
3
4

Упрощенный dfTarget:

    mCity   mState
0
1
2
3
4

В принципе, если условие истинно, мне нужно переместить 'city' и 'state' в 'mCity' и 'mState' соответственно. Если условие ложно, мне нужно переместить 'city2' и 'state2' в 'mCity' и 'mState'.

dfTarget начинается с пустого и должен заполняться построчно на основе группы условий в df1.

Я никогда не использовал pandas, и пытался исследовать это сам, но быстро заблудился во всех различных методах. Пожалуйста, какой лучший способ сделать это?

1 Ответ

3 голосов
/ 18 февраля 2020

Должно быть достаточно просто условно назначить столбцы, предполагая, что индексы и / или количество строк одинаковы.

Если условие исходит из столбца, вы можете попробовать np.where:

dfTarget[['mCity', 'mState']] = np.where(
    df1[['condition']], df1[['city', 'state']], df1[['city2', 'state2']])

Минимальный пример

df1 = pd.DataFrame({
    'city': list('abc'), 
    'state': list('def'), 
    'condition': [True, False, True], 
    'city2': list('hij'), 
    'state2': list('klm')})
dfTarget = pd.DataFrame(index=df1.index, columns=['mCity', 'mState'])

dfTarget[['mCity', 'mState']] = np.where(
    df1[['condition']], df1[['city', 'state']], df1[['city2', 'state2']])

  mCity mState
0     a      d
1     i      l    # comes from second group of columns
2     c      f
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...