Как создать объединение множества множеств, используя выражение генератора?

Чтобы добавить к этому известному вопросу (хотя и слишком поздно): вы также можете сделать df.groupby('column_name').get_group('column_desired_value').reset_index(), чтобы создать новый фрейм данных с указанным столбцом, имеющим определенное значение. Например,

import pandas as pd
df = pd.DataFrame({'A': 'foo bar foo bar foo bar foo foo'.split(),
                   'B': 'one one two three two two one three'.split()})
print("Original dataframe:")
print(df)

b_is_two_dataframe = pd.DataFrame(df.groupby('B').get_group('two').reset_index()).drop('index', axis = 1) 
#NOTE: the final drop is to remove the extra index column returned by groupby object
print('Sub dataframe where B is two:')
print(b_is_two_dataframe)

Запустите это:

Original dataframe:
     A      B
0  foo    one
1  bar    one
2  foo    two
3  bar  three
4  foo    two
5  bar    two
6  foo    one
7  foo  three
Sub dataframe where B is two:
     A    B
0  foo  two
1  foo  two
2  bar  two
29
задан Björn Pollex 9 August 2010 в 07:38
поделиться

3 ответа

Просто используйте метод .union () .

>>> l = [set([1,2,3]), set([4,5,6]), set([1,4,9])]
>>> frozenset().union(*l)
frozenset([1, 2, 3, 4, 5, 6, 9])

Это работает для любой итерации из итераций.

53
ответ дан 28 November 2019 в 01:17
поделиться

Я предполагаю, что вы пытаетесь избежать промежуточного создания объектов frozenset при построении объединения?

Вот один из способов сделать это. ПРИМЕЧАНИЕ: первоначально здесь использовался itertools. chain(), но, как отмечается в комментарии Кенни, версия ниже немного лучше:

import itertools

def mkunion(*args):
    return frozenset(itertools.chain.from_iterable(args))

Вызов выглядит так:

a = set(['a','b','c'])
b = set(['a','e','f'])
c = mkunion(a,b)       # => frozenset(['a', 'c', 'b', 'e', 'f'])
6
ответ дан 28 November 2019 в 01:17
поделиться

Выражение вложенного генератора. Но я думаю, что они немного загадочны, поэтому способ, предложенный Кенни TM, может быть более ясным.

frozenset(some_item for some_set in some_sets for some_item in some_set)
4
ответ дан 28 November 2019 в 01:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: