0
このようなデータを用いて出発:パンダ:最後の行の値に基づいて、ドロップ列
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
次に、Iは、date
によって合計を計算する列にピボットcat
、各列の合計を実行して計算する:
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
今私は、最後の列は、いくつかの値未満である列を削除する150結果はのようになりますと言う:
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
私はそれの一部を考え出した:
mask = summary[-1:].squeeze() > 150
cat
count A False
B True
C True
D False
は私に列をドロップするためのマスクを与えます。私が理解できないことは、summary.drop(...)
への呼び出しでそれを使用する方法です。何かヒント?
私は異なった値を持っています。あなたは種を生成した直後にそれらを手に入れましたか? – Alexander
これは、あなたが望むフィルターを返しますか? 'mask.index.get_level_values(1)[mask]'? – EdChum