我有一个看起来像这样的数据框。
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]]
我要做的是创建一个新的空数据框,并按照列表中的附加列填充它。为此,我将需要遍历列表列表并追加相应的列。这是所需的输出:
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]])
但是,每次都覆盖新数据帧而不是附加数据,并且还将数据附加为行而不是列。
EDIT 对于同等长度的列表,以下解决方案效果很好:
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]])
答案 0 :(得分:3)
使用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
编辑:对于一般的解决方案,请创建Series
并通过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
答案 1 :(得分:2)
使用>>> list('abc')
['a', 'b', 'c']
melt