【问题标题】:How to create a dataframe from a python groupby如何从 python groupby 创建数据框
【发布时间】:2019-06-30 21:35:19
【问题描述】:

我的第一个数据框包含一个由卡的唯一 ID (card_id) 组成的列:

treino.head(5)

            card_id   feature_1   feature_2   feature_3
0   C_ID_92a2005557           5         2             1
1   C_ID_3d0044924f           4         1             0
2   C_ID_d639edf6cd           2         2             0
3   C_ID_186d6a6901           4         3             0
4   C_ID_cdbd2c0db2           1         3             0

我的第二个数据框是这些卡片的传递历史:

df2.head(5)

   authorized_flag          card_id  city_id category_1      merchant_id
0                Y  C_ID_92a2005557       88          N  M_ID_e020e9b302
1                Y  C_ID_d639edf6cd       88          N  M_ID_86ec983688
2                Y  C_ID_92a2005557       88          N  M_ID_979ed661fc
3                Y  C_ID_92a2005557       88          N  M_ID_e6d5ae8ea6
4                Y  C_ID_92a2005557       88          N  M_ID_e020e9b302
5                Y  C_ID_4e6213e9bc      333          N  M_ID_50af771f8d
6                Y  C_ID_92a2005557       88          N  M_ID_5e8220e564
7                Y  C_ID_4e6213e9bc        3          N  M_ID_9d41786a50
8                Y  C_ID_d639edf6cd       88          N  M_ID_979ed661fc

使用时:

merged_left = pd.merge (left = df1, right = df2, how = left, left_on = 'card_id', right_on = 'card_id')

它增加了 card_id 的行,因为在第二个数据帧中 card_id 出现了好几次。我已经把它放在左边做连接,只留下第一个数据帧的唯一 card_id,但我的问题仍然存在。

我已经明白它会增加行数,因为 df2 是购物历史,而 card_id 出现多次但我无法解决。

已经尝试过类似的方法:

df2.groupby (['card_id', 'merchant_id']). size (). reset_index ()

但我仍然有几行相同的 card_id,他们可以帮我创建一个数据框,每个唯一的 card_id 和商家 ID 各只有 1 行,我是否必须创建一个汇总数据的新变量?

【问题讨论】:

  • 不确定我是否理解正确,但merged_left.drop_duplicates(['card_id'], keep='last') 会起作用吗?
  • 做了这项工作,它会保留card_id最常出现在df2中的merchant_id吗?

标签: python pandas dataframe


【解决方案1】:

如果您只想要 card_id / merchant_id 的列表(哪个用户购买了 从哪个商家的东西),从df2中提取数据就足够了:

df2[['card_id', 'merchant_id']].drop_duplicates()

如您所见,不需要 groupby,只需阅读相关列并 删除重复项。

更复杂一点的情况是当您需要时,例如具体多少次 card_id 从特定的 merchant_id 购买了一些东西。 然后需要 groupby 并且使用 size() 函数可以获得所需的值:

df2.groupby(['card_id', 'merchant_id']).size()

可能与您一样使用 .reset_index() 完成。

当然,特定的 card_id 出现在几个输出行中,但每次 不同 merchant_id(以及相关的交易数量 这两个科目之间)。

因此,请确定除了 card_idmerchant_id 之外还需要哪些信息。 这是确定生成答案所需的代码所必需的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2020-10-11
    • 2014-07-24
    • 2021-04-28
    • 1970-01-01
    相关资源
    最近更新 更多