如何根据 user_id 和购买月份提取数据?

Posted

技术标签:

【中文标题】如何根据 user_id 和购买月份提取数据?【英文标题】:How to extract data based on user_id and purchase month? 【发布时间】:2022-01-08 06:17:01 【问题描述】:

我有一个数据集,我需要从中提取在 1 月和 2 月两个月内购买的用户和用户数据。您能帮我写代码吗?

所需的输出应如下所示

【问题讨论】:

你能分享你已经尝试过的东西吗? 【参考方案1】:

首先,我们可以使用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

【讨论】:

感谢您的反馈,在还有其他月份之前我没有提到它,并且无论顺序如何,此命令都会检查 2 个唯一值(在我的情况下,仅是 1 月和 2 月)。这意味着其中将包含两个唯一值的任意组合。 我更新了答案,它是否正确回答了您的问题? 在您的情况下,它只会检查 ['jan','feb'] 模式,但客户可能有例如这个 ['jan','jan','feb'], ['feb ','feb','jan'] 月份与 jan 和 feb 相同,但不会包含在输出中。客户可能在 1 月有 10 次购买,在 2 月有 3 次购买,它们应该包含在其中。 确实!我更新了答案以避免这种情况,它对你有用吗?【参考方案2】:

过滤器:

df[(df["Purchase month"]=="Jan") | (df["Purchase month"]=="Feb")]

排序:

df.sort_values(by=["user_id"])

【讨论】:

我认为在这种情况下,如果任何一个陈述为真,它将选择该数据。我只想要那些在 1 月和 2 月都购买的用户。 哎呀,对不起——是的,你是对的——我误读了这个问题!但是我看到你有几个正确的答案,所以我对自己的粗心感到不那么内疚:-D【参考方案3】:

试试:

    groupby 并为每个用户 ID 创建月份列表 仅保留月份同时包含一月和二月的行,即集合 "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

【讨论】:

output.month.value_counts() ,它还提供了其他信息,请查看 value_counts() feb 385079 jan 300149 dec 178864 mar 148089 nov 78052 oct 53159 apr 48198 的结果 我只想要一月和二月的普通用户 是的——这不是给你的吗?用户 ID 1 和 3? 非常感谢它按我想要的方式工作。 承认:)

以上是关于如何根据 user_id 和购买月份提取数据?的主要内容,如果未能解决你的问题,请参考以下文章

jquery中根据年份月份获取日期

如何从熊猫数据框中提取日期/年份/月份?

如何从日期时间对象中仅提取月份和日期?

如何根据日期获取月份的天数?

Python:在csv如何提取出某一月份的数据

Python:在csv如何提取出某一月份的数据