我的第一个数据框包含一列,该列由卡的唯一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行吗?我是否必须创建一个新变量并汇总其数据?
答案 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 之外还需要哪些信息。 这对于确定生成答案所需的代码很有必要。