如何在 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)
因为我有多个 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)