首页 > 解决方案 > 合并来自多个系列的转换数据帧

问题描述

我收到了 11 个不同熊猫系列的一些数据。我需要将整个数据组合成一个 pandas 数据框以进行进一步的分析和报告。

接收数据的格式如下:

Series1:
                        Sales
Item    Series  Year
A       Sal     2018    100
                2019    200
B       Sal     2018    300
                2019    400

Series2:
                        Purchases
Item    Series  Year
A       Pur     2018    50
                2019    100
B       Pur     2018    150
                2019    200

Series3:
                        Expenses
Product Series  Year
A       Exp     2019    100
B       Exp     2019    200

我有许多系列参数。因此,我创建了一个循环,其中以下代码合并整个系列中的两个,直到合并所有系列。我尝试使用以下代码将所有此类系列合并到一个数据框中:

df = pd.merge(df,series1,left_on=['Product','Year'],right_on=['Product','Year']).reset_index()

但是,即使我们在这里的示例中为每两对编写单独的行,它也将是:

df = pd.merge(series1,series2,left_on=['Product','Year'],right_on=['Product','Year']).reset_index()
df = pd.merge(df,series3,left_on=['Product','Year'],right_on=['Product','Year']).reset_index()

然而,这个问题是:

  1. 它只允许一次合并两个系列。
  2. 当我在此示例中合并第三个系列时,由于它没有 2018 年的数据,而不是在那里放置 NULL,它甚至删除了数据框中的系列 1 和系列 2 数据的 2018 年行。所以,我只剩下 2019 年所有三个系列的合并数据。

我考虑将所有系列单独转换为列表,然后将这些列表转换为字典,然后将其转换为数据框。这行得通,但需要付出很多努力,并且如果系列数量发生变化,则需要更改代码。所以,这对我不起作用。

还有其他方法可以做到这一点吗?

标签: pythonpandasdataframeseries

解决方案


尝试pd.concat()

import pandas as pd

import pandas as pd

s1 = pd.Series([100, 200, 300, 400], index = pd.MultiIndex.from_arrays([['A','A','B','B'],['1','1','2','2'], [2018, 2019, 2018, 2019]]))
s2 = pd.Series([50, 100, 150, 200], index = pd.MultiIndex.from_arrays([['A','A','B','B'],['3','3','4','4'], [2018, 2019, 2018, 2019]]))
s3 = pd.Series([100, 200], index = pd.MultiIndex.from_arrays([['A','B'],['5','6'], [2019,  2019]]))

df = pd.concat([s.droplevel(1) for s in [s1, s2, s3]], axis = 1)
            0   1   2
A   2018    100 50  NaN
    2019    200 100 100.0
B   2018    300 150 NaN
    2019    400 200 200.0

推荐阅读