Создать новые столбцы для определенных столбцов панд - PullRequest
0 голосов
/ 28 мая 2018

Я создаю небольшие фреймы данных из большего фрейма данных.Из большего я беру столбцы, которые содержат определенную строку, скажем «аа».Теперь в меньшем df я хочу создать новый столбец для каждого из них.Поэтому для каждого столбца 'aa' я хочу добавить '_goal', чтобы aa2, aa7, создали aa2_goal, aa7_goal для оценки, и это должно быть неспецифично, поскольку это может применяться ко многим меньшим df с множеством разных имен столбцов, но онивсе содержат определенный 'str'.

df до--

name    area    aa2 ab1 aa7 ac3 time    type  
CAN 11  0.5 1.2 0.4 2.1 7:21    H  
SPA 22  0.4 1.4 0.5 2.5 6:45    M  
USP 21  0.7 1.1 0.6 2.5 3:14    G  
COM 13  0.1 1.9 0.2 2.2 8:22    D  
MAP 16  0.3 1.8 0.1 2.4 3:11    S  

df после

name    area    aa2 ab1 aa7 ac3 time    type    aa2_new aa7_new  
CAN 11  0.5 1.2 0.4 2.1 7:21    H           
SPA 22  0.4 1.4 0.5 2.5 6:45    M           
USP 21  0.7 1.1 0.6 2.5 3:14    G         
COM 13  0.1 1.9 0.2 2.2 8:22    D         
MAP 16  0.3 1.8 0.1 2.4 3:11    S   

- моя попытка

for col in df:
    if 'aa' in df.columns:
        df[col+'_new']
print df

- тогда следующим шагом будет импорт значения в эти столбцы _goal из другого df - спасибо

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Вы можете избежать явных циклов for, отфильтровав необходимые столбцы и затем используя pd.DataFrame.join для присоединения к пустому фрейму данных:

new_cols = df.columns[df.columns.str.startswith('aa')] + '_new'
df = df.join(pd.DataFrame(columns=new_cols))

print(df)

  name  area  aa2  ab1  aa7  ac3  time type aa2_new aa7_new
0  CAN    11  0.5  1.2  0.4  2.1  7:21    H     NaN     NaN
1  SPA    22  0.4  1.4  0.5  2.5  6:45    M     NaN     NaN
2  USP    21  0.7  1.1  0.6  2.5  3:14    G     NaN     NaN
3  COM    13  0.1  1.9  0.2  2.2  8:22    D     NaN     NaN
4  MAP    16  0.3  1.8  0.1  2.4  3:11    S     NaN     NaN

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

Ваш последующий вопрос следует задавать отдельно, если на него еще никто не ответил.

0 голосов
/ 28 мая 2018

, чтобы ответить на вопрос о создании столбцов, в зависимости от того, содержат ли они подстроку типа 'aa', вы можете сделать:

for col in df.columns: # iterate over columns' names
    if 'aa' in col:
        df[col+'_goal'] = None # fill the column with None
        # or df[col+'_goal'] = '' if you want empty string in the column you create

Для того, что вы называете следующим шагом, он слишком широк, чтобы датьanwser, вы можете сделать что-то вроде df['aa2_goal'] =another_df['another_col']

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...