首页 > 解决方案 > 在 for 循环中使用 append 获得正确的输出顺序

问题描述

我有一个df我想将第 1 列放在第 0 列下,将第 2 列放在第 1 列下,依此类推,n以便我有一个系列。

输入:

df = pd.DataFrame([['Adf', 'Bdf', 'Cdf','Ddf','Edf','Fdf','Gdf'],[45.1, 34.3, 23.1,67.1,45.4,78.2,85.1]] ) 
tmp = pd.Series([], dtype=object)
for i in range(df.shape[1]-1):
    tmp=tmp.append(df.iloc[:][i].append(df.iloc[:][i+1]))

输出:df

      0     1     2     3     4     5     6
0   Adf   Bdf   Cdf   Ddf   Edf   Fdf   Gdf
1  45.1  34.3  23.1  67.1  45.4  78.2  85.1

输出::tmp几乎正确,但有重复条目

0     Adf
1    45.1
0     Bdf
1    34.3
0     Bdf
1    34.3
0     Cdf
1    23.1
0     Cdf
1    23.1
0     Ddf
1    67.1
0     Ddf
1    67.1
0     Edf
1    45.4
0     Edf
1    45.4
0     Fdf
1    78.2
0     Fdf
1    78.2
0     Gdf
1    85.1

所需输出:手动创建

Adf
45.1
Bdf
34.3
Cdf
23.1
Ddf
67.1
Edf
45.4
Fdf
78.2
Gdf
85.1

我欢迎任何更好的方法。谢谢

标签: pythonpandas

解决方案


使用DataFrame.unstack

s = df.unstack().reset_index(drop=True)
print (s)
0      Adf
1     45.1
2      Bdf
3     34.3
4      Cdf
5     23.1
6      Ddf
7     67.1
8      Edf
9     45.4
10     Fdf
11    78.2
12     Gdf
13    85.1
dtype: object

或将所有值转换为 numpy 数组,然后使用np.ravel

s = pd.Series(np.ravel(df.to_numpy().T))
print (s)
0      Adf
1     45.1
2      Bdf
3     34.3
4      Cdf
5     23.1
6      Ddf
7     67.1
8      Edf
9     45.4
10     Fdf
11    78.2
12     Gdf
13    85.1
dtype: object

推荐阅读