Próbowałem zastosować rozwiązanie dostarczone w tym pytaniu do moich rzeczywistych danych: Selecting rows in a MultiIndexed dataframe. Jakoś nie mogę uzyskać wyników, które powinien dać. Dołączyłem zarówno ramkę danych do wyboru, jak i wynik.Niepoprawne wyniki podczas stosowania rozwiązania do rzeczywistych danych
Czego potrzebuję;
Wiersze 3, 11 i 12 powinny zostać zwrócone (po dodaniu kolejnych 4 kolumn należy wybrać również 12. Nie jest to teraz).
df_test = pd.read_csv('df_test.csv')
def find_window(df):
v = df.values
s = np.vstack([np.zeros((1, v.shape[1])), v.cumsum(0)])
threshold = 0
r, c = np.triu_indices(s.shape[0], 1)
d = (c - r)[:, None]
e = s[c] - s[r]
mask = (e/d < threshold).all(1)
rng = np.arange(mask.shape[0])
if mask.any():
idx = rng[mask][d[mask].argmax()]
i0, i1 = r[idx], c[idx]
return pd.DataFrame(
v[i0:i1],
df.loc[df.name].index[i0:i1],
df.columns
)
cols = ['2012', '2013', '2014', '2015']
df_test.groupby(level=0)[cols].apply(find_window)
csv_file jest tutaj: https://docs.google.com/spreadsheets/d/19oOoBdAs3xRBWq6HReizlqrkWoQR2159nk8GWoR_4-g/edit?usp=sharing
EDIT: dodano Prawidłowe dataframes.
Uwaga: niebieski ramy = rzędów, które powinny być zwracane, żółty ramek znajduje się kolejne wartości kolumn, które są < 0 (próg).
nie wydaje się być tabelą z wieloma indeksami; Czy możesz wyjaśnić swoje kryterium, aby wybrać wiersze? –
Twój kod jest dla mnie trudny do odczytania. Czy możesz po prostu wyjaśnić logikę utrzymania każdego wiersza w prostym języku angielskim. Czy to ostatnia karta danych, której oczekiwałeś? –
@ted, wyjaśnienie kodu znajduje się w innym pytaniu, o którym wspomniałem. Ostatnia ramka danych jest teraz dostępna, jednak wiersz 12 również powinien powrócić. Kryteria to kolumna 2012 .... 2015 muszą być poniżej 0, indywidualnie lub kolejno połączone. – Zanshin