我有这样的数据集:
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
在此数据集中,我要比较并选择两个或多个符合以下条件的连续:
因此,如果我应用过滤器,我应该获得以下数据:
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 ...
您可以使用regular expressions隔离字段并使用命名组,然后使用groupdict()
函数将每个字段的值存储到字典中,并将最后一个字典中的值与当前字典进行比较。因此,使用两个字典(当前字典和最后一个字典)遍历数据集的每一行,并使用正则表达式模式字符串在每行上执行groupdict()
,以将每行分成命名字段,然后比较两个字典的值。
这将解决问题: