2017-07-02 140 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])'糾正它。 –