选择满足跨越python中多列的条件的记录

时间:2017-12-27 06:58:24

标签: python pandas numpy dataframe filter

我有以下数据:

enter image description here

因此,每个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

有人可以帮帮我吗?

1 个答案:

答案 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