Я хотел бы выделить бункеры для «S» отдельно, где каждый столбец (X & Y)> 0,5 или несколько ящиков> 0,5 * 'количество строк.Выбор строк в мультииндексированном фрейме данных
В примере;
для 'AR1' должен только быть выбран бен 4, так как 'X' и 'Y' является> 0,5 (синего указано)
для 'PO1' должны бункера 1, 2, 3 и 4 можно выбрать, потому что 'X' и 'Y'> (4 * 0,5) (желтый обозначен).
Я пробовал это раньше с for loop
, но это не сработало правильно; Selecting multiple (neighboring) rows conditionally
np.random.seed(0)
N = 20
S = ['AR1', 'PO1']
df = pd.DataFrame(
{'X':np.random.uniform(-1,1,N),
'Y':np.random.uniform(-1,1,N),
'S':np.random.choice(S,N),
})
df['bins_X'] = df.groupby('S')['X'].apply(pd.qcut, q=5, labels=np.arange(5)) # create bins per column 'S'
def func(df): # create function to group per 'S' and their bins
df1 = df.groupby(['S','bins_X']).sum()
new_cols= list(zip(df1.columns.get_level_values(0)))
df1.columns = pd.MultiIndex.from_tuples(new_cols)
return df1
print func(df)
EDIT
Что это должно выглядеть это ФР, как показано в этом вопросе, но строки, которые не квалифицируют отфильтрованы. Я проверяю это; значения в X и Y> 0,5 для любой строки (bin) отдельно или в сочетании. Комбинации строк только последовательно, 2, 3, 4 или 5 строк вместе.
I.e, тогда комбинации строк для 0; 0 + 1, 0 + 1 + 2, 0 + 1 + 2 + 3 и 0 + 1 + 2 + 3 + 4. Для 1; 1 + 2, 1 + 2 + 3 и 1 + 2 + 3 + 4 и т. Д.
Несколько строк будут суммироваться с количеством строк x 0,5, X и Y должны быть> 2,5 для строк от 0 до 4 для пример.
EDIT2: @JohnE и piRSquared, обе ваши решения работают, которые, однако, будут работать лучше, если в кадре данных есть другие столбцы, которые не должны оцениваться?
Кроме того, что, если я хочу добавить дополнительное условие в ваши решения?
EDIT3: @piRSquared, Когда подмножество некоторых столбцов я получаю только те, которые мне нужны, и мне нужны все они, а не только подмножество.
Не могли бы вы помочь? Благодарю.
Спасибо, это работает. Я внес изменения. Мне нужно использовать ваше решение или JohnE на моем реальном data_set. Однако у этого набора есть несколько дополнительных препятствий для меня. – Zanshin
Ницца! Я уничтожил мой, поскольку я знал, что это было довольно медленно, и в любом случае вы включили мой код в тайминги, так что, если кто-то заботится об этом. У меня было ощущение, что делать это будет нелегко, так что я странно рад видеть, что это было нелегко! – JohnE
Я могу оценить настроение ;-) – piRSquared