Как получить значения из ячейки информационного кадра на основе нескольких условий в новом столбце? - PullRequest
0 голосов
/ 24 января 2020

У меня есть следующий фрейм данных

enter image description here

df = pd.DataFrame([['1','aa', 'eee', 'text 1', 'text 1'], ['1', 'aa', 'fff', 'text 2'], ['1', 'aa', 'ggg', 'text 3'],
               ['2','aa', 'eee', 'text 4', 'text 4'], ['2', 'aa', 'fff', 'text 5'], ['2', 'aa', 'ggg', 'text 6'],
               ['3','bb', 'hhh', 'text 7', 'text 7'], ['3', 'bb', 'jjj', 'text 8'], ['3', 'bb', 'kkk', 'text 9'],
               ['3', 'bb', 'mmm', 'text 10'], ['4','bb', 'hhh', 'text 11', 'text 11'], ['4', 'bb', 'jjj', 'text 12'],
               ['4', 'bb', 'kkk', 'text 13'], ['4', 'bb', 'mmm', 'text 14'], ['5','aa', 'eee', 'text 15', 'text 15'],
               ['5', 'aa', 'fff', 'text 16'], ['5', 'aa', 'ggg', 'text 17']], columns=['foo', 'bar','name_input','string', 'Feature 1'])

Теперь мне нужно добавить новый столбец на основе трех условий, и значение должно быть используется из двух строк.

Следующие условия:

  • если bar = aa и name_input = fff и name_input = ggg, то новым значением в столбце должен быть текст 2 + текст 3

В конце я хочу, чтобы мой вывод был следующим:

enter image description here

df = pd.DataFrame([['1', 'aa', 'eee', 'text 1', 'text 1', 'text 2 + text 3'], ['1', 'aa', 'fff', 'text 2'], ['1', 'aa', 'ggg', 'text 3'],
               ['2', 'aa', 'eee', 'text 4', 'text 4', 'text 5 + text 6'], ['2', 'aa', 'fff', 'text 5'], ['2', 'aa', 'ggg', 'text 6'],
               ['3', 'bb', 'hhh', 'text 7', 'text 7', 'text 8 + text 9'], ['3', 'bb', 'jjj', 'text 8'], ['3', 'bb', 'kkk', 'text 9'],
               ['3', 'bb', 'mmm', 'text 10'], ['4', 'bb', 'hhh', 'text 11', 'text 11', 'text 12 + text 13'], ['4', 'bb', 'jjj', 'text 12'],
               ['4', 'bb', 'kkk', 'text 13'], ['4', 'bb', 'mmm', 'text 14'], ['5','aa', 'eee', 'text 15', 'text 15', 'text 16 + text 17'],
               ['5', 'aa', 'fff', 'text 16'], ['5', 'aa', 'ggg', 'text 17']], columns=['foo', 'bar', 'name_input', 'string', 'Feature 1', 'Feature 2'])

Я пытался использовать ниже:

df_merge1.loc[(df_merge1['bar'] == 'aa') & (df_merge1['name_input'] == 'fff') & (df_merge1['name_input'] == 'ggg'), 'Feature 2'] = df_merge1['string'].values[1] + df_merge1['string'].values[2]

Однако я не могу заполнить значения из строкового столбца в новый столбец. Похоже, я что-то упустил.

Любая помощь очень ценится!

1 Ответ

1 голос
/ 24 января 2020

Используйте pandas shift , чтобы получить значения следующей строки. Numpy .where делает условный отбор

condition1 = ((df.bar=="aa") &
              (df.name_input.shift(-1)=="fff") &
              (df.name_input.shift(-2)=="ggg")
             )

condition2 = ((df.bar=="bb") & 
              (df.name_input.shift(-1)=="jjj") &
              (df.name_input.shift(-2)=="kkk"))

outcome = df.string.shift(-1) + '+' + df.string.shift(-2)

df.assign(feature2 = np.where(condition1|condition2, outcome,''))

    foo bar name_input  string  Feature 1   feature2
0   1   aa     eee      text 1  text 1  text 2+text 3
1   1   aa     fff      text 2  None    
2   1   aa     ggg      text 3  None    
3   2   aa     eee      text 4  text 4  text 5+text 6
4   2   aa     fff      text 5  None    
5   2   aa     ggg      text 6  None    
6   3   bb     hhh      text 7  text 7  text 8+text 9
7   3   bb     jjj      text 8  None    
8   3   bb     kkk      text 9  None    
9   3   bb     mmm      text 10 None    
10  4   bb     hhh      text 11 text 11 text 12+text 13
11  4   bb     jjj      text 12 None    
12  4   bb     kkk      text 13 None    
13  4   bb     mmm      text 14 None    
14  5   aa     eee      text 15 text 15 text 16+text 17
15  5   aa     fff      text 16 None    
16  5   aa     ggg      text 17 None    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...