合并来自多个系列的转换后的数据帧

问题描述

我收到了 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,'Year']).reset_index()
df = pd.merge(df,series3,'Year']).reset_index()

但是这个问题是:

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

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

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

解决方法

您是否尝试过使用 to_frame 方法?

例如,您可以使用

df = pd.Series["a","b","c"]
df.to_frame()

转换。

尝试在您的数据框中使用此方法。

这是文档中的内容。

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.to_frame.html

,

试试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],['3','3','4','4'],2019]]))
s3 = pd.Series([100,['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