Имея DF со столбцами A и B, я хотел бы добавить дополнительный столбец C, который будет содержать комбинацию значений A и B для каждой строки. Т.е., если у меня есть DF:Доступ к исходному индексу после группового управления
A B
0 1 1
1 1 2
2 2 1
3 2 2
Я хотел бы создать:
A B C
0 1 1 1_1
1 1 2 1_2
2 2 1 2_1
3 2 2 1_2
Очевидно, что я могу пойти на все ряды ФР и просто объединить значения. Это очень мало для больших таблиц. Я могу также использовать .unique()
для столбцов A и B и перебирать все комбинации, создавая векторы col1_un
и col2_un
соответственно, а затем обновляет соответствующие индексы в таблице, используя что-то вроде
cols_2_merge = ['A','B']
col1_un = DF[cols_2_merge[0]].unique()
col2_un = DF[cols_2_merge[1]].unique()
for i in range(len(col1_un)):
try:
ind1 = np.where(DF[cols_2_merge[0]].str.contains(col1_un[i], na=False))[0]
except:
ind1 = np.where(DF[cols_2_merge[0]] == col1_un[i])[0]
for j in range(len(col2_un)):
try:
ind2 = np.where(DF[cols_2_merge[1]].str.contains(col2_un[j], na=False))[0]
except:
ind2 = np.where(DF[cols_2_merge[1]] == col2_un[j])[0]
new_ind = col1_un[i] + '-' + col2_un[j]
tmp_ind = np.in1d(ind1, ind2)
ind = ind1[tmp_ind]
if len(ind) > 0:
DF[new_col_name][ind] = new_ind
Это по-прежнему медленно. Я могу играть с ним немного больше, не просматривая всю DF, но уменьшая область поиска до индексов, которые пока не были изменены. Еще медленнее.
Существует опция группы, которая делает именно то, что я хочу, нахожу все уникальные пары комбинаций из двух столбцов, и это относительно быстро, но я не понял, как получить доступ к индексу исходного DF для каждая группа. Помогите, пожалуйста?
ли эта работа: 'ФР [«C»] = df ['A']. astype (str) + '_' + df ['B']. astype (str) '? – joris
Как '2 2' стать' 1_2'? –
Предполагалось, что это 2_2 - type ;-( – user3861925