根据列名从另一个DataFrame填充Pandas DataFrame

5

I have a DataFrame of the following form:

    a b c
0   1 4 6
1   3 2 4
2   4 1 5

我有一个列名列表,需要使用这些列名从第一个DataFrame中对应于每个标签的列来创建一个新的DataFrame。例如,如果我的列名列表是['a','b','b','a','c'],则生成的DataFrame应为:

    a b b a c
0   1 4 4 1 6   
1   3 2 2 3 4
2   4 1 1 4 5

我一直在尝试找到一种快速执行此操作的方法,因为我正在处理极大的数据框,我认为循环不是一个合理的选项。


你应该考虑使用 pandas.melt,避免出现重复的列。 - Phillip Cloud
3个回答

7
您可以使用列表来选择它们:
In [44]:

cols = ['a', 'b', 'b', 'a', 'c']
df[cols]
Out[44]:
   a  b  b  a  c
0  1  4  4  1  6
1  3  2  2  3  4
2  4  1  1  4  5

[3 rows x 5 columns]

如果你已经创建了名为df的数据框,那么就不需要循环。使用列名列表将只索引它们并创建你想要的数据框。


3
您可以直接这样做:
>>> df
   a  b  c
0  1  4  6
1  3  2  4
2  4  1  5

>>> column_names
['a', 'b', 'b', 'a', 'c']

>>> df[column_names]
   a  b  b  a  c
0  1  4  4  1  6
1  3  2  2  3  4
2  4  1  1  4  5

[3 rows x 5 columns]

0

0.17 版本开始,您可以像这样使用 reindex

In [795]: cols = ['a', 'b', 'b', 'a', 'c']

In [796]: df.reindex(columns=cols)
Out[796]:
   a  b  b  a  c
0  1  4  4  1  6
1  3  2  2  3  4
2  4  1  1  4  5

注意:理想情况下,您不希望有重复的列名。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接