【问题标题】:How can I merge three columns into one column according to the order of in the three columns [closed]如何根据三列中的顺序将三列合并为一列[关闭]
【发布时间】:2019-05-18 15:43:00
【问题描述】:

请给我一个建议好吗?

我有三列,例如:

x     y     z
0.2   0.5   0.26
0.75  0.58  0.25
0.78  0.86  0.95
0.56  0.75  0.52
0.45  0.47  0.57
0.2   0.58  0.98

结果:我只需要一个具有此序列的列:

    xyz
x1  0.2
y1  0.5
z1  0.26
x2  0.75
y2  0.58
z2  0.25
... 0.78
    0.86
    0.95
    …

我没有发现类似的问题...非常感谢。我尝试使用“dcast”(R)或“concat”(Python),但我是堆栈。

【问题讨论】:

标签: python r merge concat dcast


【解决方案1】:
as.vector(unlist(t(df)))

这应该可以解决问题。如果您希望按列获得结果,请摆脱 t() 运算符

编辑

抱歉,我假设您的列属于 dataframe。如果不是这种情况,您可以创建一个使用

df=cbind(x,y,z)

【讨论】:

  • 好的,非常感谢!
【解决方案2】:

如果 x, y, z 是列表对象,可以使用 zip 函数检索元素 同时从这些列表中获取,并使用 enumerate 函数获取这些列表中有多少索引。

for i, (a, b, c) in enumerate(zip(x, y, z)):
    print("x{} {}".format(i, a))
    print("y{} {}".format(i, b))
    print("z{} {}".format(i, c))

【讨论】:

  • 或许添加一些解释?
  • 枚举函数其实是一个很好的解决方案。谢谢。
【解决方案3】:

您可以使用pd.melt 并使用np.tile 创建您想要的行名:

m = df.T.melt(value_name='xyz')
rows = np.tile(df.columns, df.shape[0])
m['variable'] = rows.tolist() + (m.variable + 1).astype(str)

    variable   xyz
0        x1  0.20
1        y1  0.50
2        z1  0.26
3        x2  0.75
4        y2  0.58
5        z2  0.25
6        x3  0.78
7        y3  0.86
8        z3  0.95
9        x4  0.56
10       y4  0.75
11       z4  0.52
12       x5  0.45
13       y5  0.47
14       z5  0.57
15       x6  0.20
16       y6  0.58
17       z6  0.98

如果你想像索引那样做:

m.set_index('variable')

【讨论】:

  • 非常感谢您清晰而有用的回答!
  • 很高兴它有帮助:) 请不要忘记接受答案
【解决方案4】:

先堆叠列,然后删除多索引:

df2 = df.stack().reset_index(drop=True)

现在对值进行排序

print df2.sort_values().reset_index(drop=True)

在此之后,您可以命名列。

【讨论】:

  • 是的,这也是一个很好的提示。谢谢。
【解决方案5】:
x <- c(0.2, 0.75, 0.78, 0.56, 0.45, 0.2)
y <- c(0.5, 0.58, 0.86, 0.75, 0.47, 0.58)
z <- c(0.26, 0.25, 0.95, 0.52, 0.57, 0.98)

d <- data.frame(x,y,z)


datalist <- list()
for( i in 1:nrow(d))
{
  m <- d[i,]
  datalist[[i]] <- m
}
output <- unlist(datalist,use.names = F)
output

输出

0.20 0.50 0.26 0.75 0.58 0.25 0.78 0.86 0.95 0.56 0.75 0.52 0.45 0.47 0.57 0.20
0.58 0.98

希望这对你有用。

问候, 迪内什·瓦苏

【讨论】:

  • 很好,非常简单明了,非常感谢!
猜你喜欢
  • 2021-12-04
  • 1970-01-01
  • 1970-01-01
  • 2019-10-04
  • 2020-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-15
相关资源
最近更新 更多