如何根据user_id和购买月份提取数据?
How to extract data based on user_id and purchase month?
我有一个数据集,我需要从中提取用户和在 1 月和 2 月这两个月购买的用户数据。你能帮我写代码吗?
所需的输出应该如下所示
过滤器:
df[(df["Purchase month"]=="Jan") | (df["Purchase month"]=="Feb")]
排序:
df.sort_values(by=["user_id"])
首先,我们可以使用groupby
获取不同购买月份的列表:
>>> df = df.sort_values(by='purchase_month', ascending=False)
>>> df_grouped = df.groupby(['user_id'])['purchase_month'].apply(lambda x: list(np.unique(x))).reset_index()
>>> df_grouped['purchase_month'] = df_grouped['purchase_month'].astype(str)
>>> df_grouped
user_id purchase_month
0 1 ['Feb', 'Jan']
1 2 ['Feb']
2 3 ['Feb', 'Jan']
3 4 ['mar', 'mar']
然后,我们筛选至少在 2 个不同月份内购买过的客户:
>>> valid_users = df_grouped[df_grouped['purchase_month'] == "['Feb', 'Jan']"]['user_id'].tolist()
>>> valid_users
[1, 3]
最后,我们可以用这些用户过滤第一个 DataFrame 以获得预期的结果:
>>> df[df["user_id"].isin(valid_users)].sort_values(by=["user_id"])
user_id purchase_month product
0 1 jan football
3 1 feb bed
2 3 feb toaster
4 3 jan printer
尝试:
groupby
并为每个用户 ID 创建月份列表
- 只保留月份包括 Jan 和 Feb 的行,即集合
{"Jan", "Feb"}
是月份 的子集
months = df.groupby("User id")["Purchase month"].agg(list)
output = df[df["User id"].isin(months[months.map({"Jan", "Feb"}.issubset)].index)]
>>> output
User id Purchase month Product
0 1 Jan Football
2 3 Feb Toaster
3 1 Feb Bed
4 3 Jan Printer
我有一个数据集,我需要从中提取用户和在 1 月和 2 月这两个月购买的用户数据。你能帮我写代码吗?
所需的输出应该如下所示
过滤器:
df[(df["Purchase month"]=="Jan") | (df["Purchase month"]=="Feb")]
排序:
df.sort_values(by=["user_id"])
首先,我们可以使用groupby
获取不同购买月份的列表:
>>> df = df.sort_values(by='purchase_month', ascending=False)
>>> df_grouped = df.groupby(['user_id'])['purchase_month'].apply(lambda x: list(np.unique(x))).reset_index()
>>> df_grouped['purchase_month'] = df_grouped['purchase_month'].astype(str)
>>> df_grouped
user_id purchase_month
0 1 ['Feb', 'Jan']
1 2 ['Feb']
2 3 ['Feb', 'Jan']
3 4 ['mar', 'mar']
然后,我们筛选至少在 2 个不同月份内购买过的客户:
>>> valid_users = df_grouped[df_grouped['purchase_month'] == "['Feb', 'Jan']"]['user_id'].tolist()
>>> valid_users
[1, 3]
最后,我们可以用这些用户过滤第一个 DataFrame 以获得预期的结果:
>>> df[df["user_id"].isin(valid_users)].sort_values(by=["user_id"])
user_id purchase_month product
0 1 jan football
3 1 feb bed
2 3 feb toaster
4 3 jan printer
尝试:
groupby
并为每个用户 ID 创建月份列表- 只保留月份包括 Jan 和 Feb 的行,即集合
{"Jan", "Feb"}
是月份 的子集
months = df.groupby("User id")["Purchase month"].agg(list)
output = df[df["User id"].isin(months[months.map({"Jan", "Feb"}.issubset)].index)]
>>> output
User id Purchase month Product
0 1 Jan Football
2 3 Feb Toaster
3 1 Feb Bed
4 3 Jan Printer