我有一个如下所示的数据框。
df =
0 1 2 3 4
0 0.5 0.4 0.3 0.2 0.1
1 0.5 0.4 0.3 0.2 0.1
2 0.5 0.4 0.3 0.2 0.1
3 0.5 0.4 0.3 0.2 0.1
还有一个列表列表,如下所示。
dir = [[0,1,2],[3,4]]
我想要做的是创建一个新的空数据框,并根据列表用 append 列填充它。为此,我需要循环遍历列表并 append 相应的列。这是所需的输出:
0 1
0 0.5 0.2
1 0.5 0.2
2 0.5 0.2
3 0.5 0.2
4 0.4 0.1
5 0.4 0.1
6 0.4 0.1
7 0.4 0.1
8 0.3
9 0.3
10 0.3
11 0.3
这是我的代码尝试:
new_df = pd.DataFrame()
for i in dir:
for j in i:
new_df.append([df[i]])
但是每次都会覆盖新的数据帧而不是 append ,并且还将数据 append 为行而不是列。
编辑 以下解决方案对于相同长度的列表列表效果很好:
L = [[0,1],[2,3]]
df = pd.DataFrame(np.hstack([df[x].values.T.ravel()[:, None] for x in L]))
print (df)
但是我需要一个可以处理不同长度列表的解决方案(即 list = [ [0,1,2], [3,4] ])
最佳答案
使用numpy.hstack
为了防止使用 DataFrame
构造函数按列名称对齐列:
L = [[0,1],[2,3]]
df = pd.DataFrame(np.hstack([df[x].values.T.ravel()[:, None] for x in L]))
print (df)
0 1
0 0.5 0.3
1 0.5 0.3
2 0.5 0.3
3 0.5 0.3
4 0.4 0.2
5 0.4 0.2
6 0.4 0.2
7 0.4 0.2
编辑:对于一般解决方案,创建系列
并通过 concat
连接在一起:
L = [[0,1,2],[3,4]]
df = pd.concat([pd.Series(df[x].values.T.ravel()) for x in L], axis=1)
print (df)
0 1
0 0.5 0.2
1 0.5 0.2
2 0.5 0.2
3 0.5 0.2
4 0.4 0.1
5 0.4 0.1
6 0.4 0.1
7 0.4 0.1
8 0.3 NaN
9 0.3 NaN
10 0.3 NaN
11 0.3 NaN
关于python - 将列 append 到新数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51860703/