如何過濾二維陣列并只保留那些滿足條件的元素,如果有 2 次點擊一個接一個然后 tocart,從第一次點擊過濾陣列示例
df = pd.DataFrame({
'a': ['Jason', 'Jason', 'Boby', 'Boby', 'Boby','Boby','Boby','Cob'],
'b': [1, 2, 5, 5, 4,2,1, 6],
'c': ['x', 'y', 'z', 'x', 'y','d', 'd','z'],
'd': ['click', 'click', 'tocart', 'click', 'tocart','click','click', 'tocart']
})
df = df.groupby(["a"]).apply(lambda x: x.sort_values(["b"], ascending = True)).reset_index(drop=True)
df['combine'] = df[['b','c','d']].values.tolist()
df = df[['a','combine']].groupby('a').agg(pd.Series.tolist).reset_index()
df
如果是鮑比
| 一個 | 結合 |
|---|---|
| 博比 | [[1, d, click],[2, d, click], [4, y, tocart], [5, x, click],[5, z, tocart]] |
| 玉米棒 | [[6, z, tocart]] |
我想在再次單擊然后 tocart 后丟失來自陣列 bc 的第一次單擊。Cob 應該不在結果 df 中,因為他的陣列中沒有“點擊”,而 Jason 在他的陣列中沒有點擊。
我期待的結果
| 一個 | 結合 |
|---|---|
| 博比 | [[2, d, 點擊], [4, y, tocart], [5, x, click],[5, z, tocart]] |
uj5u.com熱心網友回復:
這樣的東西會起作用嗎?基本上做你所描述的或多或少的:
def slicing(y):
x = y[y['d'].shift() != y['d']].to_numpy()
if np.isin(['click', 'tocart'], x[:,-1]).all():
return x
else:
return np.nan
out = df.sort_values(by='b').groupby('a').apply(slicing).dropna()
輸出:
a
Boby [[5, z, click], [5, x, tocart]]
dtype: object
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/391223.html
下一篇:預期檔案結束
