python - 将列 append 到新数据框

标签 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]] 

我想要做的是创建一个新的空数据框,并根据列表用 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/

相关文章:

python - 如何覆盖python函数的默认帮助消息

python - GAE/P : Migrating to NDB efficiently

python - Kivy:如何让外部库工作?

python - 两个不同长度列表的循环组合

java - 将节点列表的元素扔到堆栈上

python - 从 DataFrame 行元素生成元组

python - 嵌套理解中的 NameError

Python 按数字对字典列表进行排序

python - 在Python中,比较多列的行差异

python - Pandas numpy 比较两个不同大小的数组