Ausgehend von Daten wie diese fallen:pandas: Spalten basierend auf dem Wert in letzter Reihe
np.random.seed(314)
df = pd.DataFrame({
'date':[pd.date_range('2016-04-01', '2016-04-05')[r] for r in np.random.randint(0,5,20)],
'cat':['ABCD'[r] for r in np.random.randint(0,4,20)],
'count': np.random.randint(0,100,20)
})
cat count date
0 B 84 2016-04-04
1 A 95 2016-04-05
2 D 89 2016-04-02
3 D 39 2016-04-05
4 A 39 2016-04-01
5 C 61 2016-04-05
6 C 58 2016-04-04
7 B 49 2016-04-03
8 D 20 2016-04-02
9 B 54 2016-04-01
10 B 87 2016-04-01
11 D 36 2016-04-05
12 C 13 2016-04-05
13 A 79 2016-04-04
14 B 91 2016-04-03
15 C 83 2016-04-05
16 C 85 2016-04-05
17 D 93 2016-04-01
18 C 32 2016-04-02
19 B 29 2016-04-03
nächste I berechnen Summen von date
, Pivot cat
in Spalten und laufende Summen für jede Spalte berechnet werden:
summary = df.groupby(['date','cat']).sum().unstack().fillna(0).cumsum()
cat A B C D
date
2016-04-01 80 235 99 0
2016-04-02 85 295 153 14
2016-04-03 111 363 224 14
2016-04-04 111 379 296 50
2016-04-05 111 511 296 50
Jetzt möchte ich Spalten entfernen, wo die letzte Spalte kleiner als ein Wert ist, sagen 150. das Ergebnis sollte wie folgt aussehen:
cat B C
date
2016-04-01 235 99
2016-04-02 295 153
2016-04-03 363 224
2016-04-04 379 296
2016-04-05 511 296
Ich habe einen Teil davon herausgefunden:
mask = summary[-1:].squeeze() > 150
cat
count A False
B True
C True
D False
gibt mir eine Maske Spalt fallen. Was ich nicht herausfinden kann ist, wie man es mit einem Anruf an summary.drop(...)
verwendet. Irgendwelche Hinweise?
Ich habe verschiedene Werte. Hast du diese sofort nach dem Erzeugen des Samens bekommen? – Alexander
Gibt dies den gewünschten Filter zurück: 'mask.index.get_level_values (1) [mask]'? – EdChum