Чтобы добавить к этому известному вопросу (хотя и слишком поздно): вы также можете сделать 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
Просто используйте метод .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])
Это работает для любой итерации из итераций.
Я предполагаю, что вы пытаетесь избежать промежуточного создания объектов 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'])
Выражение вложенного генератора. Но я думаю, что они немного загадочны, поэтому способ, предложенный Кенни TM, может быть более ясным.
frozenset(some_item for some_set in some_sets for some_item in some_set)