我有以下数据:
因此,每个device_id可以在一年中处于多个服务(B,G,P ..)之下,并且单元格中的每个值都会捕获它使用特定服务的月数。最新专栏捕获了它正在使用的最新服务。此数据位于pandas数据框中。
现在我需要过滤掉最新服务中的月数> = 3的记录。在给出的示例中,只有家庭1,264,267应该被选中而其他的则没有。
文本格式的数据:
device_id B G P S V Other Latest
1 0 0 3 0 3 0 P
2 0 0 0 0 0 12 Other
3 0 0 0 12 0 1 S
4 0 0 0 0 12 0 V
5 0 0 0 12 0 0 S
6 0 0 0 0 12 0 V
263 0 0 0 0 0 12 Other
264 5 6 0 0 0 3 Other
265 12 0 0 0 0 0 B
266 0 12 0 0 0 0 G
267 0 2 0 3 8 0 S
有人可以帮帮我吗?
答案 0 :(得分:1)
IIUC,使用广播的numpy比较,找到最新服务等于3
的行的索引。
i = np.arange(len(df))
j = (df.columns[:-1].values[:, None] == df.Latest.values).argmax(0)
df.iloc[np.flatnonzero(df.values[i, j] == 3)]
B G P S V Other Latest
device_id
1 0 0 3 0 3 0 P
264 5 6 0 0 0 3 Other
267 0 2 0 3 8 0 S