Рассмотрим следующий пример dataframePandas: как получить уникальные значения столбца, который содержит список значений?
df = pd.DataFrame({'name' : [['one two','three four'], ['one'],[], [],['one two'],['three']],
'col' : ['A','B','A','B','A','B']})
df.sort_values(by='col',inplace=True)
df
Out[62]:
col name
0 A [one two, three four]
2 A []
4 A [one two]
1 B [one]
3 B []
5 B [three]
Я хотел бы получить столбец, который отслеживает все уникальные строки, включенные в name
для каждой комбинации col
.
То есть, ожидается выход
df
Out[62]:
col name unique_list
0 A [one two, three four] [one two, three four]
2 A [] [one two, three four]
4 A [one two] [one two, three four]
1 B [one] [one, three]
3 B [] [one, three]
5 B [three] [one, three]
Действительно, например, для группы А, вы можете увидеть, что уникальный набор строк, включенных в [one two, three four]
, []
и [one two]
является [one two]
я могу получить соответствующее число уникальных значений с использованием Pandas : how to get the unique number of values in cells when cells contain lists?:
df['count_unique']=df.groupby('col')['name'].transform(lambda x: list(pd.Series(x.apply(pd.Series).stack().reset_index(drop=True, level=1).nunique())))
df
Out[65]:
col name count_unique
0 A [one two, three four] 2
2 A [] 2
4 A [one two] 2
1 B [one] 2
3 B [] 2
5 B [three] 2
, но замена nunique
на unique
выше не удалась.
Любые идеи? Спасибо!
интересно. 'sum' со строками ?! –
@Noobie это хуже, чем это. Это солнце в списке списков. Он создает объединенный список, над которым я применяю np.unique – piRSquared
hehehe. я просто попытался, но кажется, что ваши хорошие решения терпят неудачу, когда отсутствуют значения для col. В этом случае я получаю 'TypeError: может только конкатенировать список (а не« int ») для списка'. Замена отсутствующих значений на 'fillna ('')' или 'fillna ('[]')' не работает. Есть идеи? –