【发布时间】:2021-11-11 16:59:34
【问题描述】:
我想根据列事件中“1”的出现来过滤我的数据框值。 当出现 1 时,应删除 1 之后的所有内容。
当我有一个单一列表时,这有效:
event = [5, 5, 5, 5, 1, 5]
index = event.index(1)
event[:index]
输出:
[5, 5, 5, 5]
现在我想为我的整个数据框执行此操作,如下所示:
| session_id | events |
|00000000000 | [4,5,5,3,2,1,5] |
|00000000001 | [4,5,5,1,2,1,5,5,5] |
|00000000002 | [4,5,1,3,2,1,5,5,5,1] |
import pandas as pd
df = pd.DataFrame([['00000000000 ', [4, 5, 5, 3, 2, 1, 5]],
['00000000001', [4, 5, 5, 1, 2, 1, 5, 5, 5]],
['00000000002 ', [4, 5, 1, 3, 2, 1, 5, 5, 5, 1]]],
columns=['session_id', 'events'])
但我似乎无法做到正确。有人可以帮助我吗? 我的最终解决方案是这样做:
for i, row in df.iterrows():
target_id = row['events'].index(1)
df['events_short'] = row['events'][:target_id]
但它给了我以下错误:
ValueError: Length of values (4) does not match length of index (10)
【问题讨论】: