df1:|A|B|C|ID||---|---|---|---||1|5|2|Y||4|6|4|Z|
df2:|A|B|C|ID||---|---|---|---||2|1|2|Y||4|6|4|Z|
合并:|案例|A|B|C|ID||------|---|---|---|---||在|1|5|2|Y之前|||4|6|4|Z之前|||2|1|2|Y之后|||4|6|4|Z|之后
A列所需枢轴:|ID |之前|之后||-|------|-----||Y|1|2||Z|4|4|
我想使用for循环为dfs1和2中的每列创建一个透视表。这些枢轴的行将是ID,列将是"case"。
我想使用for循环为每列的透视表创建一个新的df。
稍后,我将删除每个数据透视表中before和after值相同的行(只保留不同的行)。
我希望我对你的理解是正确的:
df1["case"] = "before"
df2["case"] = "after"
df = pd.concat([df1, df2]).pivot(index="ID", columns="case")
for c in df.columns.get_level_values(0).unique():
print(df.xs(c, axis=1))
print("-" * 80)
打印:
case after before
ID
Y 2 1
Z 4 4
--------------------------------------------------------------------------------
case after before
ID
Y 1 5
Z 6 6
--------------------------------------------------------------------------------
case after before
ID
Y 2 2
Z 4 4
--------------------------------------------------------------------------------
编辑:将数据帧添加到字典中:
df1["case"] = "before"
df2["case"] = "after"
df = pd.concat([df1, df2]).pivot(index="ID", columns="case")
all_dataframes = {}
for c in df.columns.get_level_values(0).unique():
all_dataframes[c] = df.xs(c, axis=1).copy()
for key, dataframe in all_dataframes.items():
print("Key:", key)
print("DataFrame:", dataframe)
print("-" * 80)