首页 > 解决方案 > Pandas 来自其他 DataFrames 的多个 DataFrames

问题描述

假设我有一个不同长度的基本“测试”数据框,我是根据滑块日期选择器构建的。

            seasons
test    
2018-02-19  Winter
2018-02-20  Winter
2018-02-21  Winter
2018-02-22  Winter
... ...
2019-06-25  Summer
2019-06-26  Summer
2019-06-27  Summer
2019-06-28  Summer

假设现在我有多个不同超市的产品价格数据框,例如:

Loblaws

     Summer   Winter
Milk  -7800.0  -3600.0
Salt  -9000.0  -4500.0
Pear -15300.0 -11700.0

Wal-Mart

     Summer   Winter
Milk -14700.0 -10200.0
Salt  -7500.0  -4800.0
Pear  -3000.0  -9600.0

Whole Foods

     Summer  Winter
Milk -11500.0 -7500.0
Salt  -7000.0 -8500.0
Pear  -1000.0 -6500.0

我将如何根据每个超市的商品制作带有列的新数据框?例如:

Loblaws     seasons Milk    Salt    Pear
2018-02-19  Winter  -3600.0 -4500.0 -11700.0
2018-02-20  Winter  -3600.0 -4500.0 -11700.0
... ...
2019-06-25  Summer  -7800.0 -9000.0 -15300.0
2019-06-26  Summer  -7800.0 -9000.0 -15300.0

沃尔玛/全食超市也一样?

我不知道将超市数据帧转换为字典然后在基于字典的循环中运行,或者我是否(加入?)它们并循环遍历超市数据帧是否会更好。感谢您的任何帮助。

编辑:我已经能够用一个来做到这一点,我只是不确定如何以迭代的方式来做到这一点(无论我有多少数据帧而没有直接单独调用它们)。做一个我用过的:

Loblaws = Loblaws.transpose()
Loblaws_Merged = pd.merge(test, Loblaws, left_on='seasons', right_index = True)

标签: pythonpandasdataframe

解决方案


建立在@Mayeul sgc 对多案例场景的评论的基础上,并为任何寻找同一问题答案的人的利益:您可以执行以下操作:

merged_dataframes = []
# first put all dataframes in a list
supermarkets = [loblaws, wal_mart, whole_foods]
# then use a for loop and Mayeul sgc's clever code:
for df in supermarkets:
    df = df.transpose()
    merged_dataframe = pd.merge(test, df, left_on='seasons', right_index = True)
    merged_dataframes.append(merged_dataframe)

希望这对你有用。让我知道你是否需要别的东西。


推荐阅读