我有一个需求,我需要在特定时间段内在同一张邮票卡上找到用户的商人的store_store_id的所有唯一值。我有按邮票卡ID和用户ID分组以根据条件获取数据帧。现在,我需要在距该条目10分钟的间隔内找到此数据帧的唯一商人_商店_id。
我的方法是,我将在该groupby数据框中循环,然后在该组的该数据框中找到所有索引,然后从索引到索引+ 60分钟的时间创建一个新的数据框,然后在其中找到唯一的merchant_store_id它。如果唯一的merchant_store_id> 1,那么我将从那时开始将该数据帧附加到最终数据帧。这种方法的问题是,它适用于小数据,但对于20,000行大小的数据,它在Linux上显示内存错误,并在Windows上继续运行。下面是我的代码
fi_df = pd.DataFrame()
for i in df.groupby(["stamp_card_id", "merchant_id", "user_id"]):
user_df = i[1]
if len(user_df)>1:
# get list of unique indexes in that groupby df
index = user_df.index.values
for ind in index:
fdf = user_df[ind:ind+np.timedelta64(1, 'h')]
if len(fdf.merchant_store_id.unique())>1:
fi_df=fi_df.append(fdf)
fi_df.drop_duplicates(keep="first").to_csv(csv_export_path)
“分组依据”后的采样数据是:
((117, 209, 'oZOfOgAgnO'), stamp_card_id stamp_time stamps_record_id user_id \
0 117 2018-10-14 16:48:03 1756 oZOfOgAgnO
1 117 2018-10-14 16:54:03 1759 oZOfOgAgnO
2 117 2018-10-14 16:58:03 1760 oZOfOgAgnO
3 117 2018-10-14 17:48:03 1763 oZOfOgAgnO
4 117 2018-10-14 18:48:03 1765 oZOfOgAgnO
5 117 2018-10-14 19:48:03 1767 oZOfOgAgnO
6 117 2018-10-14 20:48:03 1769 oZOfOgAgnO
7 117 2018-10-14 21:48:03 1771 oZOfOgAgnO
8 117 2018-10-15 22:48:03 1773 oZOfOgAgnO
9 117 2018-10-15 23:08:03 1774 oZOfOgAgnO
10 117 2018-10-15 23:34:03 1777 oZOfOgAgnO
merchant_id merchant_store_id
0 209 662
1 209 662
2 209 662
3 209 662
4 209 662
5 209 662
6 209 663
7 209 664
8 209 662
9 209 664
10 209 663 )
我也尝试过重采样方法,但是随后我分别获得了时间数据,在该时间的结束时间忽略了用户打多个商人_商店ID的条件。
任何帮助将不胜感激。谢谢
答案 0 :(得分:0)
如果这些是日期时间,则可以使用以下内容进行过滤:
filtered_set = set(df[df["stamp_time"]>=x][df["stamp_time"]<=y]["col of interest"])
df[df["stamp_time"]>=x]
过滤df
添加[df["stamp_time"]<=y]
可以过滤已过滤的df
["merchant_store_id"]
仅捕获指定的列(系列)
最后set()
返回唯一列表(集合)
特定于您的代码:
x = datetime(lowerbound) #pseudo-code
y = datetime(upperbound) #pseudo-code
filtered_set = set(fi_df[fi_df["stamp_time"]>=x][fi_df["stamp_time"]<=y]["col of interest"])