【问题标题】:How merge or join two dataframes, but keeping certain columns of both如何合并或连接两个数据框,但保留两者的某些列
【发布时间】:2019-09-26 20:34:32
【问题描述】:

如何合并或连接两个数据框,但保留两者的某些列?

我需要将这两个数据框合并为一个。数据框 2 包含所有列数据框 1 只需要列“leads”

数据框1

campaignid leads 
35119190 391 
31664745 365 
4899110 211 
325772660 195 
64002140 131 
143679198 58 
283494007 45 

数据帧2

campaignid cost time reach 
35119190 391 391 391 
31664745 365 391 391 
4899110 211 391 391 
325772660 195 391 391 
64002140 131 391 391 
143679198 58 391 391 
283494007 45 391 391

想要的结果:

数据框2

campaignid cost time reach leads 
35119190 391 391 391 391 
31664745 365 391 391 365 
4899110 211 391 391 211 
325772660 195 391 391 195 
64002140 131 391 391 131 
143679198 58 391 391 58 
283494007 45 391 391 45 

g_spend.to_dict()

{'id': {0: 35119190,
  1: 64002140,
  2: 272351300,
  3: 4899110,},
 'Campaign_ID_name': {0: 'brand',
  1: '-',
  2: '-',
  3: 'science',
,
 'Month': {0: '2019|08',
  1: '2019|08',
  2: '2019|08',
  3: '2019|08',
},
 'Account': {0: 'a',
  1: 'a',
  2: 'b',
  3: 'c',
},
 'campaignid': {0: 35119190,
  1: 64002140,
  2: 272351300,
  3: 4899110,
 },
 'campaign_name': {0: 'All_Brand',
  1: 'All',
  2: 'All_GBHS',
  3: 'All_Science',
},
 'cost': {0: '$59,399.37 ',
  1: '$12,660.37 ',
  2: '$5,631.96 ',
}}

grouped_cw.to_dict()

{'leads': {'1076533154': 40.0,
  '143679198': 58.0,
  '169278078': 13.0,
  '1729099155': 8.0,
}}

【问题讨论】:

  • 不就是Dataframe1.merge(Dataframe2, on='campaignid')吗?
  • @QuangHoang 不幸的是,我以前试过。它给出错误:“您正在尝试在 int64 和对象列上合并。如果您希望继续,您应该使用 pd.concat ”
  • 表示这两个campaignid 类型不同。将它们都转换为字符串?
  • df1.to_dict() 和 df2.to_dict() 将它们的输出添加到这个问题中。
  • 啊... grouped_cw id 是一个系列,索引中有campaignids!

标签: python pandas merge concat


【解决方案1】:
pd.merge(Dataframe1, Dataframe2, on='campaignid')

【讨论】:

  • 很遗憾没有,我之前试过。它给出错误:“您正在尝试在 int64 和对象列上合并。如果您希望继续,您应该使用 pd.concat ”
  • @Peter :那么您正在尝试合并两种不同类型的数据。检查数据类型。一个可能是字符串,一个是 Int。
  • 感谢@GSBYBF,但它仍然无法正常工作。 KeyError: 'campaignid' 在处理上述异常期间,发生了另一个异常: – 我在其中一个数据帧中使用了 grouped_cw= cw.groupby(["campaignid"]).sum(),它是问题的原因跨度>
【解决方案2】:

让我们使用map:

df2['leads'] = df2['campaignid'].map(df1.set_index('campaignid')['leads'])
df2

输出:

   campaignid  cost  time  reach  leads
0    35119190   391   391    391    391
1    31664745   365   391    391    365
2     4899110   211   391    391    211
3   325772660   195   391    391    195
4    64002140   131   391    391    131
5   143679198    58   391    391     58
6   283494007    45   391    391     45

试试

df2['leads'] = df2['campaignid'].map(grouped_cw)

【讨论】:

  • 感谢@Scott Boston,但它仍然无法正常工作。 KeyError: 'campaignid' 在处理上述异常的过程中,又发生了一个异常:
  • 我在其中一个数据框中使用了grouped_cw= cw.groupby(["campaignid"]).sum(),它是问题的原因
猜你喜欢
  • 1970-01-01
  • 2019-09-28
  • 2017-12-24
  • 2021-09-14
  • 2013-02-04
  • 2022-01-19
  • 2020-06-07
  • 1970-01-01
  • 2018-12-10
相关资源
最近更新 更多