Chciałbym wyodrębnić osobno pojemniki dla "S", gdzie każda kolumna (X & Y)> 0,5 lub wiele pojemników> 0,5 * "liczba rzędów".Wybieranie wierszy w wielowierszowej ramce danych
W przykładzie;
dla 'AR1' należy wybrać tylko pojemnik 4, ponieważ 'X' i 'Y' jest> 0,5 (niebieski wskazano)
dla 'PA1' należy pojemniki 1, 2, 3 i 4 jest zaznaczone, ponieważ "X" i "Y" są> (4 * 0,5) (kolor żółty wskazany).
Próbowałem już wcześniej z for loop
, ale to nie działało poprawnie; 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
Co powinno wyglądać to df jak pokazano w pytaniu, ale wiersze, które nie kwalifikują się odfiltrowane. Sprawdzam to; wartości w X i Y> 0,5 dla dowolnego wiersza (bin) oddzielnie lub łącznie. Kombinacje rzędów tylko kolejno, 2, 3, 4 lub 5 rzędów łącznie.
Np. Kombinacje wierszy dla 0 są wówczas; 0 + 1, 0 + 1 + 2, 0 + 1 + 2 + 3 i 0 + 1 + 2 + 3 + 4. Za 1 ; 1 + 2, 1 + 2 + 3 i 1 + 2 + 3 + 4 itd.
Wiele wierszy stanowiłoby sumę rzędów x 0,5, X i Y musiałyby być> 2,5 dla wierszy 0 do 4 dla przykład.
EDIT2: @JohnE i piRSquared, oba twoje rozwiązania działają, który jednak działałby lepiej, gdyby nie było innych kolumn w ramce danych, które nie powinny być oceniane?
Co jeśli chciałbym dodać dodatkowy warunek do twoich rozwiązań?
EDIT3: @piRSquared, Podczas podzbioru niektórych kolumn otrzymuję tylko te, które zostały mi zwrócone, gdzie potrzebuję ich wszystkich, nie tylko podsegmentowane.
Czy możesz pomóc? Dzięki.
Dzięki, to działa. Włączyłem edycję. Muszę użyć albo twojego rozwiązania, albo JohnE's na moim realnym zestawie danych. Ten zestaw ma jednak dla mnie kilka dodatkowych przeszkód. – Zanshin
Nice! Wymazywałam moje, ponieważ wiedziałam, że jest dość powolna i mimo to włączyłeś mój kod w czasie, więc jeśli ktoś się tym przejmuje, to jest. Miałem wrażenie, że nie jest to łatwe do zrobienia w numpy, więc jestem niesamowicie szczęśliwy, widząc, że nie było to łatwe! – JohnE
Mogę docenić sentyment ;-) – piRSquared