问题描述
我收到了 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()
但是这个问题是:
- 一次只允许合并两个系列。
- 当我在此示例中合并第三个系列时,由于它没有 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