繁体   English   中英

遍历 dataframe 的两个列表

[英]Looping through two lists of dataframe

下面是我正在使用的脚本。 为了练习,我创建了两组数据帧,一组是 df1、df2 和 df3,另一组是 dv1、dv2 和 dv3。 然后我创建了两组列表,test 和 test2,然后将它们合并为 zip_list。 现在,我正在尝试创建一个循环 function 来执行以下操作。 1. 设置索引并创建键 = 2022 和 2021。 2. 交换级别,使列彼此相邻。 循环 function 有效,但仅适用于第一个 dataframe。如果不逐一调用每个 dataframe,我如何将它应用到在 zipped_list 中找到的整个数据帧?

import pandas as pd
#Creating a set of dataframes
data = {'product_name': ['laptop', 'printer', 'tablet', 'desk', 'chair'],'item_name': ['hp', 'logitech', 'samsung', 'lg', 'lenovo'],
        'price': [1200, 150, 300, 450, 200]}
df1 = pd.DataFrame(data)

data2 = {'product_name': ['laptop', 'printer', 'tablet', 'desk', 'chair'],'item_name': ['hp', 'mac', 'fujitsu', 'lg', 'asus'],
        'price': [2200, 200, 300, 450, 200]}
df2 = pd.DataFrame(data2)

data3 = {'product_name': ['laptop', 'printer', 'tablet', 'desk', 'chair'],'item_name': ['microsoft', 'logitech', 'samsung', 'lg', 'asus'],
        'price': [1500, 100, 200, 350, 400]}
df3 = pd.DataFrame(data3)

#Creating another set of dataframes
data = {'product_name': ['laptop', 'printer', 'tablet', 'desk', 'chair'],'item_name': ['hp', 'logitech', 'samsung', 'lg', 'lenovo'],
        'price': [10, 20, 30, 40, 50]}
dv1 = pd.DataFrame(data)

data2 = {'product_name': ['laptop', 'printer', 'tablet', 'desk', 'chair'],'item_name': ['hp', 'mac', 'fujitsu', 'lg', 'asus'],
        'price': [10, 20, 30, 50, 50]}
dv2 = pd.DataFrame(data2)

data3 = {'product_name': ['laptop', 'printer', 'tablet', 'desk', 'chair'],'item_name': ['microsoft', 'logitech', 'samsung', 'lg', 'asus'],
        'price': [1, 2, 3, 4, 5]}
dv3 = pd.DataFrame(data3)

#creating a list for dataframe
test=[df1,df2,df3]
test2=[dv1,dv2,dv3]

#combining two lists
zipped = zip(test, test2)
zipped_list = list(zipped)

#Looping through the zipped_list
for x,y in zipped_list:
    z=pd.concat([zipped_list[0][0].set_index(['product_name','item_name']), zipped_list[0][1].set_index(['product_name','item_name'])], 
                    axis='columns', keys=['2022', '2021'])
    z=z.swaplevel(axis='columns')[zipped_list[0][0].columns[2:]] 
print(z)

在此处输入图像描述

除了这个dataframe,应该还有两个。

原因是您只访问zipped_list的 1 个元素并且不使用重复的元素(x 和 y)。 您可以创建一个新列表和 append 修改后的 dataframe 到该列表:

new_list = []
for x in zipped_list:
    z=pd.concat([x[0].set_index(['product_name','item_name']), x[1].set_index(['product_name','item_name'])], 
                    axis='columns', keys=['2022', '2021'])
    z=z.swaplevel(axis='columns')[x[0].columns[2:]] 
    new_list.append(z)
new_list

Output:

[                       price     
                         2022 2021
 product_name item_name           
 laptop       hp         1200   10
 printer      logitech    150   20
 tablet       samsung     300   30
 desk         lg          450   40
 chair        lenovo      200   50,
                        price     
                         2022 2021
 product_name item_name           
 laptop       hp         2200   10
 printer      mac         200   20
 tablet       fujitsu     300   30
 desk         lg          450   50
 chair        asus        200   50,
                        price     
                         2022 2021
 product_name item_name           
 laptop       microsoft  1500    1
 printer      logitech    100    2
 tablet       samsung     200    3
 desk         lg          350    4
 chair        asus        400    5]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM