我對我認為的簡單過濾任務有一些問題。我們有一個大致具有這種形狀的資料:
| 姓名 | 物品 | 累積總和 |
|---|---|---|
| 姓名1 | 第 1 項 | 0.05 |
| 第 2 項 | 0.10 | |
| 第 3 項 | 0.31 | |
| 姓名2 | 第 1 項 | 0.02 |
| 第 2 項 | 0.07 | |
| 姓名3 | 第 1 項 | 0.01 |
| 第 2 項 | 0.07 | |
| 第 3 項 | 0.21 | |
| 姓名 4 | 第 1 項 | 0.03 |
| 第 2 項 | 0.12 | |
| 第 3 項 | 0.21 | |
| 第 4 項 | 0.35 |
我想要的是回傳專案小于 0.2 的資料框和正上方的專案。這是我想要作為輸出的表:
| 姓名 | 物品 | 累積總和 |
|---|---|---|
| 姓名1 | 第 1 項 | 0.05 |
| 第 2 項 | 0.10 | |
| 第 3 項 | 0.31 | |
| 姓名2 | 第 1 項 | 0.02 |
| 第 2 項 | 0.07 | |
| 姓名3 | 第 1 項 | 0.01 |
| 第 2 項 | 0.07 | |
| 第 3 項 | 0.21 | |
| 姓名 4 | 第 1 項 | 0.03 |
| 第 2 項 | 0.12 | |
| 第 3 項 | 0.21 |
我嘗試為每個“名稱”找到 cumsum 大于 0.2 的“專案”,然后使用索引回傳整個范圍:
df = df.loc['name1']
idx = df.loc[df['cumsum'] > 0.2].index[0]
iidx = df.index.get_loc(idx) 1
df = df.iloc[:iidx]
并為每個“名稱”執行此操作。但是,這對于 name2 失敗了。
有人可以幫忙嗎?
uj5u.com熱心網友回復:
使用|按位OR的掩碼每組移DataFrameGroupBy.shift:
m = (df['cumsum'] < 0.2)
df = df[m | m.groupby(level=0).shift(fill_value=False)]
print (df)
cumsum
name item
name1 item 1 0.05
item 2 0.10
item 3 0.31
name2 item 1 0.02
item 2 0.07
name3 item 1 0.01
item 2 0.07
item 3 0.21
name4 item 1 0.03
item 2 0.12
item 3 0.21
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/353686.html
