首页 > 解决方案 > 如何将两列(第一列具有相同的值)插入数据框

问题描述

下面是解释我想要什么的简单示例。我需要将第一个数据框的列添加到其他数据框:

import pandas as pd
df = pd.DataFrame({'Animal': ['Falcon', 'Falcon',
                               'Parrot', 'Parrot'],
                    'Max Speed': [380., 370., 24., 26.]})

outlets = pd.DataFrame(columns = ['mac', 'x'])

outlets = outlets.append({'mac' : 1, 'x' : [*df.Animal]}, ignore_index=True)
outlets

输出是:

   mac       x
0   1   [Falcon, Falcon, Parrot, Parrot]

但我真正想要的是:

   mac       x
0   1      Falcon
1   1      Falcon
2   1      Parrot
3   1      Parrot

请告诉我怎样才能做出我想要的...

标签: pythonpandasdataframe

解决方案


根据 append here的文档,您可以像这样合并两个数据框:

效率较低:

import pandas as pd
df = pd.DataFrame({'Animal': ['Falcon', 'Falcon',
                               'Parrot', 'Parrot'],
                    'Max Speed': [380., 370., 24., 26.]})

outlets = pd.DataFrame(columns = ['mac', 'x'])

for animal in [*df.Animal]:
    outlets = outlets.append({'mac': 1,'x': animal}, ignore_index=True)
print(outlets)

更高效:

import pandas as pd
df = pd.DataFrame({'Animal': ['Falcon', 'Falcon',
                               'Parrot', 'Parrot'],
                    'Max Speed': [380., 370., 24., 26.]})


outlets = pd.concat(
    [pd.DataFrame([[1, animal]], columns=['mac', 'x']) for animal in [*df.Animal]],
    ignore_index=True)
print(outlets)

输出:

Less efficient:
   mac       x
0    1  Falcon
1    1  Falcon
2    1  Parrot
3    1  Parrot

More efficient:
  mac       x
0   1  Falcon
1   1  Falcon
2   1  Parrot
3   1  Parrot

推荐阅读