2017-08-19 168 views
1

我有一個數據集,每個國家的每個股票都有該日期和數據點(d1,d2,d3等)。有些數據點丟失了每個國家內的一些股票,我想與其他國家的平均水平的股票來代替它們熊貓數據透視表值循環

date stock  d1 d2 d3 country 
12.94 xyz corp 12 3 4 US 
12.95 xyz corp 13 NaN 1 US 
12.95 123 corp 3 4 12 US 
12.94 abc corp 1 3 5 CA 
12.94 abc corp NaN 3 4 CA 

因此,在上述數據點D2爲XYZ的12.95需要由平均D2的替代在美國境內爲12.95

我將不勝感激關於如何做到這一點。我創建了獨特的日期的指標和計劃使用數據透視表,其中價值通過各種數據點迭代諸如D1,D2等

cnt_avgs=rawdt.pivot_table(values=["d1",index=["country","],aggfunc=np.mean) 
+2

您有7列和6列名稱,請檢出此[post](https://stackoverflow.com/questions/20109391/how-to-make-good-reproducible-pandas-examples)詢問有關熊貓的問題並更新數據框 – DJK

回答

0

我不能完全肯定,如果這是你在找什麼。但是你可以遍歷所有的NaN列,然後缺失值的行和使用numpy.mean和有條件的大熊貓切片替代缺失值:

列表轉換成一個數據幀大熊貓:

df = pd.DataFrame(dt[1:], columns=dt[0]) 

檢查和迭代在具有NaN值的列上。然後,對於具有楠列,遍歷行和使用numpy的平均函數改變數據和熊貓條件切片:

for col in df.columns[df.isnull().any()]: 
    for row in df[df[col].isnull()].iterrows(): 
     df.loc[row[0], col] = np.mean(df[(df['date'] == row[1]['date']) & (df['country'] == row[1]['country'])][col]) 
0

IIUC,用groupbyfillna

df.groupby(['date','country'],as_index=False)\ 
    .apply(lambda x: x.fillna(x.mean()))\ 
    .reset_index(drop=True) 

輸出:

date  stock d1 d2 d3 country 
0 12.94 abc corp 1.0 3.0 5  CA 
1 12.94 abc corp 1.0 3.0 4  CA 
2 12.94 xyz corp 12.0 3.0 4  US 
3 12.95 xyz corp 13.0 4.0 1  US 
4 12.95 123 corp 3.0 4.0 12  US