2017-07-02 104 views
2

我有以下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 

回答

2
t_stats = pd.DataFrame(data = None, columns= df.columns) 

构建具有三列和零行一个数据帧。

t_stats[column] = results[0]/results[1] 

填写与标量值results[0]/results[1]column列的每一行。 由于没有行,因此没有数据被添加到t_stats

所以取而代之,将数据收集到一个字典,所有的数据被收集后,将字典转换成数据帧:

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 

注有很多格式可以转换成DataFrame的data。 上面,我使用了一个字典列表。由于只有一行,该列表只包含一个字典。或者,您可以传递一个清单字典:

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) 

会得到相同的结果。

+0

非常感谢你,完美的作品。但仅限于未来的读者。第二个选项会产生一个ValueError:如果使用所有标量值,则必须传递一个索引。 't_stats = pd.DataFrame(data,index = [0])'纠正它。 –