[英]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.