将列追加到新数据框

时间:2018-08-15 14:30:24

标签: python list pandas dataframe append

我有一个看起来像这样的数据框。

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

2 个答案:

答案 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