python - 在 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
我欢迎任何更好的方法。谢谢
解决方案
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
推荐阅读
- python - Python3 对应于 Fortran 的 where
- kubernetes-helm - 具有相关值的 Helm 图表
- cloud-foundry - 如何在不重新启动所有应用程序的情况下“缩减”CloudFoundry 应用程序?
- c - ESP8266 GPIO 16 不能用作按钮
- python - 将html标签写入具有关系的字典
- javascript - 具有数据库驱动的动态结果的模态图像库
- r - 将重复项作为一个循环。
- javascript - 3到5个api接口是什么意思?
- c++ - 当我将 uint8_t * 转换为整数时会发生什么?
- css - html输入\文本区域的默认最大长度是多少?