【问题标题】:How to join multiple dataframes within a loop using python pandas如何使用 python pandas 在循环中加入多个数据框
【发布时间】:2020-01-29 22:54:08
【问题描述】:

我在每个 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

【问题讨论】:

  • 你真的想加入它们(如加入)还是附加/连接它们?
  • 对不起,我是 python 新手。我想我应该说将它们连接起来。谢谢
  • 是的,我现在明白了这个问题。我会在一分钟内回答它,如果它可以帮助你解决它,请随时接受我的回答。

标签: python pandas dataframe join


【解决方案1】:

因此,您似乎在进行旋转,但没有将每个未旋转的数据框保存在任何地方。让我们创建一个数据框列表,它将存储每个未透视的数据框。稍后,我们将该数据帧列表作为参数传递给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:

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

【讨论】:

  • 谢谢,但我没有 df1、df2、df3。我正在遍历每个 excel 表并将其写入 unptv
  • 我需要遍历每个 daraframe 吗?
  • 哦,好吧,那你应该修改一下代码。我会在一分钟内告诉你
  • 尝试编辑下方的代码,它应该可以解决您的问题。
  • 因此,如果我使用 full_df = pd.concat(list_of_df,axis=1, sort=False),它可以满足我的需要,除了我为每个毛利、利润率和收入都有列公司和月份
【解决方案2】:

pd.concat 只会将所有内容堆在一起,您希望使用 pd.merge 实际合并 DataFrame。这与 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'])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-20
    • 2022-01-26
    相关资源
    最近更新 更多