python - 合并来自多个系列的转换数据帧
问题描述
我收到了 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()
然而,这个问题是:
- 它只允许一次合并两个系列。
- 当我在此示例中合并第三个系列时,由于它没有 2018 年的数据,而不是在那里放置 NULL,它甚至删除了数据框中的系列 1 和系列 2 数据的 2018 年行。所以,我只剩下 2019 年所有三个系列的合并数据。
我考虑将所有系列单独转换为列表,然后将这些列表转换为字典,然后将其转换为数据框。这行得通,但需要付出很多努力,并且如果系列数量发生变化,则需要更改代码。所以,这对我不起作用。
还有其他方法可以做到这一点吗?
解决方案
尝试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
推荐阅读
- php - 如何调试 Symfony Mailer 交付问题?
- c - Libconfig 和 unsigned long。UL如何操作?
- nexus - NEXUS RM3 - 如何过滤特定存储库的角色/权限
- brightway - 在brightway中从excel文件导入数据集时的单位转换
- analytics - Fetching explorer data from FlurryAPI
- spring-boot - How Eureka Server and Spring Cloud API Gateway communicates with each other?
- python-3.x - 如何使用命令更改客户端状态?不和谐.py
- jenkins - How to add a jmeter build step to jenkins pipeline when using jmeter maven plugin
- python - How to go back to first if statement if two matrices are not equivalent?
- firebase - Authenticate *from* Firebase Cloud Functions to custom Node Server