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

时间:2019-02-15 13:05:53

标签: python pandas

由于我有多个pandas DataFrame,因此我想使用for循环在所有pData上运行.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
        ...
        ...

谢谢。

2 个答案:

答案 0 :(得分:3)

将输出分配到新列表od Series,因为stack不能就地工作:

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

然后如果需要分配回去:

df1, df2, df3, df4 = dfs

或一起加入:

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

答案 1 :(得分:2)

如果我正确理解,您想就地修改dfs,但是stack不是就地运算符,而是返回一个新的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]))