如何在 for 循环中堆叠多个 pandas DataFrame

How to stack several pandas DataFrames in a for loop

因为我有多个 pandas 数据帧,我想 运行 使用 for 循环对所有数据帧执行 .stack() 方法。标记列和设置索引等其他方法有效,但由于某些原因,堆栈方法不会导致任何更改:

for df in [df1, df2, df3, df4]:
    df = df.stack()

结果:

print(df1.head())

        Q1 1990  Q2 1990  Q3 1990   ...     Q2 2018  Q3 2018  Q4 2018
EC                                  ...                              
C13840      NaN      NaN      NaN   ...         NaN      NaN      NaN
C28525      NaN      NaN      NaN   ...     8480.00  8125.00      NaN
C06541      NaN      NaN      NaN   ...         NaN      NaN      NaN
C51345      NaN      NaN      NaN   ...       13.75    15.00      NaN
C44265      NaN      NaN      NaN   ...      141.90   129.54   133.44

预期结果:

print(df1.head(10))

EC             
C13840  Q1 1990   NaN
        Q2 1990   NaN
        Q3 1990   NaN
        Q4 1990   NaN
        Q1 1991   NaN
        Q2 1991   NaN
        Q3 1991   NaN
        Q4 1991   NaN
        Q1 1992   NaN
        Q2 1992   NaN
        ...
        ...

谢谢。

如果我理解正确,您想就地修改 dfs,但是 stack 不是就地运算符,而是 returns 一个新的 df 作为输出

df = pd.DataFrame({'a': [1,2], 'b': [3,4]})
df1 = pd.DataFrame({'a': [5,6], 'b': [7,8]})


new_dfs = list(map(pd.DataFrame.stack, [df, df1]))

将输出分配给新列表 od Series,因为 stack 无法就地工作:

dfs = [df.stack() for df in [df1, df2, df3, df4]]

然后如果需要分配回来:

df1, df2, df3, df4 = dfs

或一起加入:

df = pd.concat(dfs, axis=1)