Сначала разделить столбец запятой, затем groupby
по столбцу и использовать генератор для сглаживания вложенных списков с помощью set
и join
:
df = (distinct_category['category'].str.split(', ')
.groupby(distinct_category['top_level_domain'])
.agg(lambda x: ', '.join(set(y for z in x for y in z)))
.reset_index())
print (df)
top_level_domain category
0 doubleclick.net Ads, Online Shopping, Web Ads
1 google-analytics.com Internet Services
2 google.com Content Server, Search Engines
3 inspectlet.com Internet Services
4 live.com None Assigned
5 service-now.com Business, Software/Hardware
Другим решением является присвоение обратно разделенных значений: [116 ]
df = (distinct_category.assign(category = distinct_category['category'].str.split(', '))
.groupby('top_level_domain')['category']
.agg(lambda x: ', '.join(set(y for z in x for y in z)))
.reset_index())
Никакая потребность в опции, просто сделайте предпочтительную ширину последнего столбца максимумом, и это займет все дополнительное место.
table.getColumnModel().getColumn(0).setPreferredWidth(27);
table.getColumnModel().getColumn(1).setPreferredWidth(120);
table.getColumnModel().getColumn(2).setPreferredWidth(100);
table.getColumnModel().getColumn(3).setPreferredWidth(90);
table.getColumnModel().getColumn(4).setPreferredWidth(90);
table.getColumnModel().getColumn(6).setPreferredWidth(120);
table.getColumnModel().getColumn(7).setPreferredWidth(100);
table.getColumnModel().getColumn(8).setPreferredWidth(95);
table.getColumnModel().getColumn(9).setPreferredWidth(40);
table.getColumnModel().getColumn(10).setPreferredWidth(Integer.MAX_INT);
Что произойдет, если вы вызовете setMinWidth (400)
в последнем столбце вместо из setPreferredWidth (400)
?
В JavaDoc для JTable
внимательно прочтите документацию для doLayout ()
. Вот несколько битов выбора:
Когда метод вызывается в результате изменения размера закрывающего окна, resizingColumn имеет значение null. Это означает, что изменение размера произошло «вне» JTable. и изменение - или "дельта" - должно быть распределено по всем столбцам независимо от режим автоматического изменения размера этого JTable.
Возможно, поэтому AUTO_RESIZE_LAST_COLUMN
вам не помог.
Примечание. Когда JTable корректирует ширину столбцов, он учитывает их минимальные и максимальные значения абсолютно.
Здесь говорится, что вы можете установить Min == Max для всех столбцов, кроме последних, затем установить Min = Preferred для последнего столбца и либо не устанавливать Max, либо установить очень большое значение для Max.
С JTable.AUTO_RESIZE_OFF
таблица не изменит размер любого из столбцов за вас, поэтому будет выбрана ваша предпочтительная настройка. Если ваша цель - настроить столбцы по умолчанию на ваш предпочтительный размер, за исключением того, чтобы последний столбец заполнял остальную часть панели, у вас есть возможность использовать JTable.AUTO_RESIZE_LAST_COLUMN
autoResizeMode, но это может быть наиболее эффективно при использовании с TableColumn.setMaxWidth ()
вместо TableColumn.setPreferredWidth () для всех столбцов, кроме последнего.
Убедившись, что AUTO_RESIZE_LAST_COLUMN
действительно работает, вы можете поэкспериментировать с комбинацией TableColumn.setMaxWidth ()
и TableColumn.setMinWidth ()