Делегирование - единственное решение для выполнения таких операций, когда вы используете .xib-файлы, однако все описанные выше ответы предназначены для storyboard
для .xibs-файлов, которые необходимо использовать для делегирования. это единственное решение, которое вы можете.
Другим решением является использование singleton class pattern, инициализирующее его один раз и использование его во всем приложении.
Вот одно из возможных решений для возврата всех дублированных значений в двух столбцах (то есть в строках 0, 1, 3, 4, 6, 7):
>>> key1_dups = frame.key1[frame.key1.duplicated()].values
>>> key2_dups = frame.key2[frame.key2.duplicated()].values
>>> frame[frame.key1.isin(key1_dups) & frame.key2.isin(key2_dups)]
key1 key2 data
0 1 2 5
1 2 2 6
3 1 2 6
4 2 2 1
6 2 2 2
7 2 2 8
( Изменить: на самом деле, метод df.duplicated(take_last=True) | df.duplicated()
в ответе @ Yoel более аккуратный.)
Чтобы запросить результаты вашей операции groupby
, вы можете использовать loc
. Например:
>>> dups = frame[frame.key1.isin(key1_dups) & frame.key2.isin(key2_dups)]
>>> grouped = dups.groupby(['key1','key2']).min()
>>> grouped
data
key1 key2
1 2 5
2 2 1
>>> grouped.loc[1, 2]
data 5
Name: (1, 2), dtype: int64
Альтернативно, верните grouped
обратно в «нормальный» DataFrame, сбросив оба индекса:
>>> grouped.reset_index(level=0).reset_index(level=0)
key2 key1 data
0 2 1 5
1 2 2 1
Чтобы получить список всех дублированных записей с помощью Pandas версии 0.17, вы можете просто установить 'keep = False' в функцию duplicated .
frame[frame.duplicated(['key1','key2'],keep=False)]
key1 key2 data
0 1 2 5
1 2 2 6
3 1 2 6
4 2 2 1
6 2 2 2
7 2 2 8