繁体   English   中英

如何使用 python pandas 在循环中加入多个数据帧

[英]How to join multiple dataframes within a loop using python pandas

我在每个 excel 表上有 3 个表: sheet1 - Gross , sheet2 - Margin , sheet3 - Revenue

所以我能够遍历每个工作表并取消旋转它。

但是我怎样才能把它们结合在一起呢?

在此处输入图片说明

    sheet_names = ['Gross','Margin','Revenue']

    full_table = pd.DataFrame()
    for sheet in sheet_names:
        df = pd.read_excel(BudgetData.xlsx', sheet_name = sheet, index=False)
        unpvt = pd.melt(df,id_vars=['Company'], var_name ='Month', value_name = sheet)
# how can I join unpivoted dataframes here?
        print(unpvt)

在此处输入图片说明

想要的结果:

在此处输入图片说明

更新:

谢谢@Celius Stingher。 我想这就是我需要的。 它只是给了我奇怪的排序:

在此处输入图片说明

并给我这个警告:

Sorting because non-concatenation axis is not aligned. A future version
of pandas will change to not sort by default.

To accept the future behavior, pass 'sort=False'.

To retain the current behavior and silence the warning, pass 'sort=True'.

  from ipykernel import kernelapp as app

因此,您似乎正在执行旋转但未将每个未旋转的数据帧保存在任何地方。 让我们创建一个数据框列表,它将存储每个未旋转的数据框。 稍后,我们将该数据帧列表作为参数传递给pd.concat函数以执行连接。

sheet_names = ['Gross','Margin','Revenue']
list_of_df = []
full_table = pd.DataFrame()
for sheet in sheet_names:
    df = pd.read_excel(BudgetData.xlsx', sheet_name = sheet, index=False)
    df = pd.melt(df,id_vars=['Company'], var_name ='Month', value_name = sheet)
    list_of_df.append(df)

full_df = pd.concat(list_of_df,ignore_index=True)
full_df = full_df.sort_values(['Company','Month'])
print(full_df)

编辑:

现在我了解您的需求,让我们尝试不同的方法。 在循环之后,尝试在 pd.concat 中pd.concat以下代码:

full_df = list_of_df[0].merge(list_of_df[1],on=['Company','Month']).merge(list_of_df[2],on=['Company','Month'])

pd.concat 只会将所有内容堆积在一起,您希望使用 pd.merge 实际合并数据帧。 这类似于 SQL Join 语句。 (基于您帖子中的“所需”图片)

https://pandas.pydata.org/pandas-docs/version/0.19.1/generated/pandas.DataFrame.merge.html

您只想使用要合并的列列表。 如果您将它们全部放入与工作表同名的整洁数据框中,您可能需要执行以下操作:

gross.merge(margin, on=['Company', 'Month']).merge(revenue, on=['Company', 'Month'])

暂无
暂无

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

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