使用Python Pandas For Loop为数据帧中的每一列创建透视表



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)

最新更新