【发布时间】:2022-01-14 20:53:02
【问题描述】:
我正在尝试对两个数据帧调用 df 和 df2 执行 for 循环。数据框每两列都包含价格。我正在尝试计算每个数据框中每个价格的 z 分数。所以最后,每个数据框现在将有四列。我有一个代码可以做到这一点,但它也创建了第三个数据框......为什么?
这是我的两个数据框的示例:
import pandas as pd
import numpy as np
df = pd.DataFrame(
{"date": ["2021-01-31","2021-02-28", "2021-03-31","2021-04-30"],
"Price1": [25, 30, 50, 10],
"Price2": [30, 25, 50, 100]})
df.set_index("date", inplace=True)
df.index = pd.to_datetime(df.index)
df2 = pd.DataFrame(
{"date": ["2021-01-31","2021-02-28", "2021-03-31","2021-04-30"],
"Price1": [25, 30, 50, 10],
"Price2": [30, 25, 50, 100]})
df2.set_index("date", inplace=True)
df2.index = pd.to_datetime(df2.index)
这是我想要的结果:
print(df)
Price1 Price2 Price1_z Price2_z
2021-01-31 25 30 -0.262111 -0.716465
2021-02-28 30 25 0.087370 -0.885044
2021-03-31 50 50 1.485297 -0.042145
2021-04-30 10 100 -1.310556 1.643654
print(df2)
Price1 Price2 Price1_z Price2_z
2021-01-31 25 30 -0.262111 -0.716465
2021-02-28 30 25 0.087370 -0.885044
2021-03-31 50 50 1.485297 -0.042145
2021-04-30 10 100 -1.310556 1.643654
我的问题是它正在为列表中的最后一个数据帧创建第三个数据帧名称 frame = -> df2。
如果您在下面运行此代码,您会看到何时执行 print(df, df2, frame):
import pandas as pd
import numpy as np
df = pd.DataFrame(
{"date": ["2021-01-31","2021-02-28", "2021-03-31","2021-04-30"],
"Price1": [25, 30, 50, 10],
"Price2": [30, 25, 50, 100]})
df.set_index("date", inplace=True)
df.index = pd.to_datetime(df.index)
df2 = pd.DataFrame(
{"date": ["2021-01-31","2021-02-28", "2021-03-31","2021-04-30"],
"Price1": [25, 30, 50, 10],
"Price2": [30, 25, 50, 100]})
df2.set_index("date", inplace=True)
df2.index = pd.to_datetime(df2.index)
for frame in [df,df2]:
cols = list(frame.columns)
for col in cols:
col_zscore = col + '_z'
frame[col_zscore] = (frame[col] - frame[col].mean())/frame[col].std(ddof=0)
print(df,df2,frame)
如何获得相同的结果但不创建第三个数据框?谢谢!
【问题讨论】:
-
没有第三个数据框;你正在打印
print(df,df2,frame)。当frame引用df2时,您还能期待什么? -
如果您在没有 print(df,df2,frame) 的情况下在 python 控制台中打印代码,您可以清楚地看到有 3 个数据帧。一个名字df,一个名字df2,一个名字frame
标签: python pandas dataframe for-loop