如何根据三列中的顺序将三列合并为一列

How can I merge three columns into one column according to the order of in the three columns

你能给我一个建议吗?

我有三列,e.x.:

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) 但我是堆栈。

as.vector(unlist(t(df)))

这应该可以解决问题。如果你想要按列的结果去掉 t() 运算符

编辑

抱歉,我假设您的专栏属于 dataframe。如果不是这种情况,您可以使用

创建一个
df=cbind(x,y,z)

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

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))

您可以使用 pd.melt and create the row names you want with 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')

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

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

现在对值进行排序

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

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

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

希望这对你有用。

此致, 迪内什·瓦苏