如何从python groupby创建数据框

时间:2019-06-30 21:35:19

标签: python pandas dataframe

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

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')

使用时:

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

它将card_id的行相乘,因为在第二个数据帧中,card_id出现了几次。我已经把它放在左边进行连接,只保留第一个数据帧的card_id唯一,但是我的问题仍然存在。

我已经知道它会增加行数,因为df2是购物记录,并且card_id出现了几次,但我无法解决。

已经尝试过类似的操作:

all_actions = T

但是我仍然有几行相同的card_id,它们可以帮助我创建一个数据框,其中每个唯一的card_id和商人_id只有1行吗?我是否必须创建一个新变量并汇总其数据?

1 个答案:

答案 0 :(得分:0)

如果您只想要 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_id merchant_id 之外还需要哪些信息。 这对于确定生成答案所需的代码很有必要。