合并数据框重新排序列

Posted

技术标签:

【中文标题】合并数据框重新排序列【英文标题】:merge data frames reordering columns 【发布时间】:2019-01-23 01:19:00 【问题描述】:

我有两个具有相同列名的数据框 (x, y)。例如,FIRST、NAME1、NAME2、NAME3。我需要按“FIRST”列合并它们,但像这样重新排序其他列:FIRST、NAME1.x、NAME1.y、NAME2.x、NAME2.y 等。

x
FIRST   NAME1   NAME2   NAME3
q1  xxx xxx xxx
q2  xxx xxx xxx
q3  xxx xxx xxx
q4  xxx xxx xxx

y
FIRST   NAME1   NAME2   NAME3
  q1    yyy yyy yyy
  q2    yyy yyy yyy
  q3    yyy yyy yyy
  q4    yyy yyy yyy

如果我像这样创建新的数据框:

df = merge(x,y, by = "FIRST")

我明白了

FIRST   NAME1.x NAME2.x NAME3.x NAME1.y NAME2.y NAME3.y
   q1   xxx      xxx     xxx     yyy     yyy    yyy
   q2   xxx      xxx     xxx     yyy     yyy    yyy
   q3   xxx      xxx     xxx     yyy     yyy    yyy
   q4   xxx      xxx     xxx     yyy     yyy    yyy

但我想得到下一个结果:

FIRST   NAME1.x NAME1.y NAME2.x NAME2.y NAME3.x NAME3.y
  q1    xxx      yyy     xxx     yyy     xxx    yyy
  q2    xxx      yyy     xxx     yyy     xxx    yyy
  q3    xxx      yyy     xxx     yyy     xxx    yyy
  q4    xxx      yyy     xxx     yyy     xxx    yyy

仅对列重新排序不是解决方案,因为将来总会有 x 和 y 具有不同的列数。

【问题讨论】:

这对你有用吗:df[, sort(names(df))] ? xy 中的列是否具有您可以订购的前缀?我不认为有一个连接过程会自动交错列。 @markus 的评论很可能会解决您的问题,这个问题***.com/questions/7334644/… 中也提到了这个问题 @markus,这项工作。好决定!谢谢。 【参考方案1】:

您可以考虑在合并列后重新排序:

df = merge(x,y, by = "FIRST")
df <- data.frame(FIRST = df$FIRST,
                 NAME1.x = df$NAME1.x,
                 NAME1.y = df$NAME1.y, 
                 NAME2.x = df$NAME2.x,
                 NAME2.y = df$NAME2.y, 
                 NAME3.x = df$NAME3.x,
                 NAME3.y = df$NAME3.y)

因此,您可以将列放在您想要的位置,并使用您想要的名称。

【讨论】:

【参考方案2】:

你可以使用dplyr函数left_join(df1, df2, by = 'FIRST')然后使用

%>%
select(FIRST, NAME1.x, NAME1.y, NAME2.x, NAME2.y, NAME3.x, NAME3.y)

重新排序。管道让它一步步快乐起来。

【讨论】:

以上是关于合并数据框重新排序列的主要内容,如果未能解决你的问题,请参考以下文章

python--pandas合并与连接

如何防止合并重新排序列

根据列名重新排序熊猫数据框中的列[重复]

根据列名重新排序熊猫数据框中的列[重复]

根据列名重新排序熊猫数据框中的列[重复]

根据列名重新排序熊猫数据框中的列[重复]