合并数据框时如何避免重复值?

Posted

技术标签:

【中文标题】合并数据框时如何避免重复值?【英文标题】:How to avoid repeating values when merging data frames? 【发布时间】:2021-09-06 04:51:25 【问题描述】:

我有两个数据框:

df1:  
Year       Name1    Value1
1 1967     Fallow 47.2730
2 1967 Cultivated 52.5090
3 1967  Grassland 57.5399
4 1967  Shrubland 61.3711
5 1967   Woodland 62.1911
6 1960   Fallow-w 42.2146

and df2: 
 Year       Name2   Value2
1 1967     Fallow 47.2718
2 1967 Cultivated 52.4988
3 1967  Grassland 56.8066
4 1967  Shrubland 59.3636
5 1967   Woodland 56.3803
6 1967   Fallow-w 42.1898

我想合并两个 dfs,除了值之外它们是相同的。我这样做了:

df_all = merge(df1, df2, by = 'Year') 

但它只保留一帧的重复行值并像这样结束:

  Year    Name1 Value1      Name2 Value2
1 1967  Fallow  47.273     Fallow 47.2718
2 1967  Fallow  47.273 Cultivated 52.4988
3 1967  Fallow  47.273  Grassland 56.8066
4 1967  Fallow  47.273  Shrubland 59.3636
5 1967  Fallow  47.273   Woodland 56.3803
6 1967  Fallow  47.273   Fallow-w 42.1898

我做错了什么?

【问题讨论】:

如果您的意思是不想重复名称列但确实想要两个值列然后merge(df1, df2, by = 1:2) 这也有效!谢谢!! 【参考方案1】:

如果我正确理解您的问题,我认为您需要加入: left_join(df1, df2, by = c('Year', 'Name1'= 'Name2'))

这将匹配YearName 的值。您的合并本质上只是在 Year 而不是名称上进行连接,这就是它在右侧复制这些列的原因。

【讨论】:

【参考方案2】:

如果除了你可以尝试的值之外,两个 df 完全相同:

df_all=merge(df1, df2, by=c("Year","Name"))

请注意,如果 Name1 和 Name2 具有相同的名称(上面的名称)会更容易。

【讨论】:

以上是关于合并数据框时如何避免重复值?的主要内容,如果未能解决你的问题,请参考以下文章

ExtJS 4 - 当列编辑器是组合框时如何避免网格列值变为空?

在 PySpark 中连接两个数据框时避免列重复列名

c#如何从根本上防止重复提交相同的数据

将字典列表转换为数据框时处理缺失值[重复]

如何在 R 中合并同一数据框中的行(基于特定列下的重复值)?

如何避免重复值? [复制]