我有以下df:
A B C
1 3 2
2 1 10
我现在编写了一个循环遍历每一列的函数来回归C上的每一列。目的是将每列的回归的t-stat存储在映射到列名的单独数据框中。代码如下:
import pandas as pd
t_stats = pd.DataFrame(data = None, columns= df.columns)
x = df["C"]
for column in df:
y=df[column]
results = fit_line(x,y) # fit line is a reg function defined somewhere else
t_stats[column] = results[0]/results[1]
问题在于命令:
t_stats[column] = results[0]/results[1]
我希望我计算出的结果元组中的t统计量存储在根据for循环中当前活动的列命名的列中。但是,t-stat数据帧具有来自df的列名称,但它是空的,即t统计数据根本不保存在那里。我究竟做错了什么?
所需输出t_stat数据帧:
A B C
value of regression A on C value of regression B on C value of regression C on C
答案 0 :(得分:2)
t_stats = pd.DataFrame(data = None, columns= df.columns)
构建一个包含三列和零行的DataFrame。
t_stats[column] = results[0]/results[1]
使用标量值column
填充results[0]/results[1]
列中的每一行。
由于没有行,因此没有数据添加到t_stats
。
相反,将数据收集到dict中,收集完所有数据后,将dict转换为DataFrame:
import pandas as pd
df = pd.DataFrame({'A':[1,2], 'B':[3,1], 'C':[2,10]})
data = dict()
x = df["C"]
for column in df:
y=df[column]
# results = fit_line(x,y) # fit line is a reg function defined somewhere else
results = [1,2]
data[column] = results[0]/results[1]
t_stats = pd.DataFrame([data])
print(t_stats)
产量
A B C
0 0.5 0.5 0.5
请注意,data
有许多格式可以转换为DataFrame。
上面,我使用了一系列dicts。由于只有一行,因此列表只包含一个dict。或者,您可以传递列表的字典:
import pandas as pd
df = pd.DataFrame({'A':[1,2], 'B':[3,1], 'C':[2,10]})
data = dict()
x = df["C"]
for column in df:
y=df[column]
results = [1,2]
data[column] = [results[0]/results[1]] # <-- dict of lists
t_stats = pd.DataFrame(data) # note, no more brackets around data
print(t_stats)
产生相同的结果。