根据使用python的条件选择两个或更多连续行

问题描述 投票:1回答:2

我有这样的数据集:

user        time              city    cookie    index
A        2019-01-01 11.00     NYC     123456      1
A        2019-01-01 11.12     CA      234567      2 
A        2019-01-01 11.18     TX      234567      3
B        2019-01-02 12.19     WA      456789      4 
B        2019-01-02 12.21     FL      456789      5
B        2019-01-02 12.31     VT      987654      6
B        2019-01-02 12.50     DC      157890      7
A        2019-01-03 09:12     CA      123456      8
A        2019-01-03 09:27     NYC     345678      9
A        2019-01-03 09:34     TX      123456      10
A        2019-01-04 09:40     CA      234567      11

在此数据集中,我要比较并选择两个或多个符合以下条件的连续

  1. 用户应该相同
  2. 时间差应小于15分钟
  3. Cookie应该与众不同

因此,如果我应用过滤器,我应该获得以下数据:

user        time              city    cookie    index
A        2019-01-01 11.00     NYC     123456      1
A        2019-01-01 11.12     CA      234567      2 
B        2019-01-02 12.21     FL      456789      5
B        2019-01-02 12.31     VT      987654      6
A        2019-01-03 09:12     CA      123456      8
A        2019-01-03 09:27     NYC     345678      9
A        2019-01-03 09:34     TX      123456      10

因此,在上面,比较前两行(索引1和2)满足上述所有条件。接下来的两个(索引2和3)具有相同的cookie,索引3和4具有不同的用户,选择并显示5和6,6和7的时差超过15分钟。 8,9和10符合条件,但11不符合条件,因为日期相隔24小时。

如何使用python数据框解决此问题?感谢所有帮助。


我尝试过的:

我尝试使用]创建标志>

shift()

cookiediff=pd.DataFrame(df.Cookie==df.Cookie.shift())
cookiediff.columns=['Cookiediffs']
timediff=pd.DataFrame(pd.to_datetime(df.time) - pd.to_datetime(df.time.shift()))
timediff.columns=['timediff']
mask = df.user != df.user.shift(1)

timediff.timediff[mask] = np.nan
cookiediff['Cookiediffs'][mask] = np.nan

我有这样的数据集:用户时间城市cookie索引A 2019-01-01 11.00 NYC 123456 1 A 2019-01-01 11.12 CA 234567 2 A ...

python-3.x pandas numpy dataframe data-mining
2个回答
0
投票

您可以使用regular expressions隔离字段并使用命名组,然后使用groupdict()函数将每个字段的值存储到字典中,并将最后一个字典中的值与当前字典进行比较。因此,使用两个字典(当前字典和最后一个字典)遍历数据集的每一行,并使用正则表达式模式字符串在每行上执行groupdict(),以将每行分成命名字段,然后比较两个字典的值。


0
投票

这将解决问题:

© www.soinside.com 2019 - 2024. All rights reserved.