我想用pandas合并两个数据集。代码工作,但输出不完全是我所期望的,因为我是基于ID的合并,一个可以出现多次,但在其他列中有不同的值。
我的df 1如下:
| SubscriberKey|订阅者ID|月|收入|
| --------------|--------------|--------------|--------------|
| 96346d046d42d923ed97d974f26addce04fa7324b3e1f9e69a31f297073ca06f|电话:125557370|四|二百零四|
| f75e979a030f595ba091f0a060135b733c98345b62836a278e221f503f879057|电话:125557375|七|三二九|
| 9f355d3154658f70ea6104cf4d5581f1c57c28c956dcbd49370e3d004ea8ecbd|电话:125557388传真:125557388|三|一百四十四|
| 9f355d3154658f70ea6104cf4d5581f1c57c28c956dcbd49370e3d004ea8ecbd|电话:125557388传真:125557388|六|八十二|
其中每一行对应于一个用户。然而,如在df 2中,每个用户可以有多于一个条目,因为每个条目对应于一个用户的每月收入。说到这里,我想使用基于订阅者ID的方式将另一个数据集合并到这个数据集中。我想合并的数据集是df 2:
| 订阅者ID|月|发送_电子邮件|
| --------------|--------------|--------------|
| 电话:125557388传真:125557388|四|1|
| 电话:125557388传真:125557388|八|1|
| 电话:125557388传真:125557388|1|1|
| 电话:125557388传真:125557388|六|1|
| 125557400|四|1|
| 125557400|六|1|
正如你所看到的,这个用户在这一个中出现了4次,我们可以看到每个用户在一个月内发送了多少封电子邮件。我使用代码**pd.merge(df 1,df 2,on ='SubscriberId)**得到以下结果:
| SubscriberKey|订阅者ID|月_x|收入|月_y|发送_电子邮件|
| --------------|--------------|--------------|--------------|--------------|--------------|
| f75e979a030f595ba091f0a060135b733c98345b62836a278e221f503f879057|电话:125557375|七|三二九|二|1|
| f75e979a030f595ba091f0a060135b733c98345b62836a278e221f503f879057|电话:125557375|七|三二九|五|1|
| f75e979a030f595ba091f0a060135b733c98345b62836a278e221f503f879057|电话:125557375|七|三二九|六|二|
| 9f355d3154658f70ea6104cf4d5581f1c57c28c956dcbd49370e3d004ea8ecbd|电话:125557388传真:125557388|三|一百四十四|四|1|
| 9f355d3154658f70ea6104cf4d5581f1c57c28c956dcbd49370e3d004ea8ecbd|电话:125557388传真:125557388|三|一百四十四|八|1|
| 9f355d3154658f70ea6104cf4d5581f1c57c28c956dcbd49370e3d004ea8ecbd|电话:125557388传真:125557388|三|一百四十四|1|1|
| 9f355d3154658f70ea6104cf4d5581f1c57c28c956dcbd49370e3d004ea8ecbd|电话:125557388传真:125557388|三|一百四十四|六|1|
| 9f355d3154658f70ea6104cf4d5581f1c57c28c956dcbd49370e3d004ea8ecbd|电话:125557388传真:125557388|六|八十二|四|1|
| 9f355d3154658f70ea6104cf4d5581f1c57c28c956dcbd49370e3d004ea8ecbd|电话:125557388传真:125557388|六|八十二|八|1|
| 9f355d3154658f70ea6104cf4d5581f1c57c28c956dcbd49370e3d004ea8ecbd|电话:125557388传真:125557388|六|八十二|1|1|
| 9f355d3154658f70ea6104cf4d5581f1c57c28c956dcbd49370e3d004ea8ecbd|电话:125557388传真:125557388|六|八十二|六|1|
我需要在代码中添加什么,以便最终结果看起来像这样:
| SubscriberKey|订阅者ID|月|收入|发送_电子邮件|
| --------------|--------------|--------------|--------------|--------------|
| 9f355d3154658f70ea6104cf4d5581f1c57c28c956dcbd49370e3d004ea8ecbd|电话:125557388|四||1|
| 9f355d3154658f70ea6104cf4d5581f1c57c28c956dcbd49370e3d004ea8ecbd|电话:125557388|八||1|
| 9f355d3154658f70ea6104cf4d5581f1c57c28c956dcbd49370e3d004ea8ecbd|电话:125557388|1||1|
| 9f355d3154658f70ea6104cf4d5581f1c57c28c956dcbd49370e3d004ea8ecbd|电话:125557388|六|八十二||
| 9f355d3154658f70ea6104cf4d5581f1c57c28c956dcbd49370e3d004ea8ecbd|电话:125557388|三|一百四十四||
我想避免重复MONTH列,并且只填充它的“sent_emails”部分或“income part”,而不是基于ID的所有可能组合。
2条答案
按热度按时间7ivaypg91#
IIUC,你可以试试这个:
输出:
goqiplq22#
这应该可以!