使用列中最近邻居的平均值输入错过的值

时间:2017-05-21 23:36:26

标签: python pandas dataframe

我有一个DataFrame:

df = pd.DataFrame(data=[676, 0, 670, 0, 668], index=['2012-01-31 00:00:00','2012-02-29 00:00:00',
                                                     '2012-03-31 00:00:00','2012-04-30 00:00:00',
                                                     '2012-05-31 00:00:00'])  
df.index.name = "Date"
df.columns = ["Number"]

看起来像:

              Number
Date    
2012-01-31 00:00:00 676
2012-02-29 00:00:00 0
2012-03-31 00:00:00 670
2012-04-30 00:00:00 0
2012-05-31 00:00:00 668

如何相应地输入(676 + 670)/ 2和(670 + 668)/ 2的第2和第4值?

我可以将值保存为np.array并将它们排列在数组中,但这很荒谬!

3 个答案:

答案 0 :(得分:3)

我使用where方法并指定将0替换为np.nan。在我们将0指定为NaN后,我们可以使用fillna方法。使用ffillbfill,我们会使用相应的上一个和前一个值填充所有NaN,添加它们,然后除以2.

df.where(df.replace(to_replace=0, value=np.nan),
 other=(df.fillna(method='ffill') + df.fillna(method='bfill'))/2)

                     Number
Date                       
2012-01-31 00:00:00   676.0
2012-02-29 00:00:00   673.0
2012-03-31 00:00:00   670.0
2012-04-30 00:00:00   669.0
2012-05-31 00:00:00   668.0

答案 1 :(得分:1)

<?php
$i=5;
while ($row= mysqli_fetch_assoc($result)) {
$string="drag5";

echo '<div style= "width: 100px;  height: 100px;  margin: 10px;border: 3px 
solid #FFFFFF; box-shadow: 10px 10px 5px #888888; float: left" 
class="boxes"><img height="100px" width="100px" id="<?php echo $string; ?>" 
class="dragg" src="data:image/jpeg;base64,'.base64_encode( $row['source'] 
).'"/></div>';
$i++;
}
?>

答案 2 :(得分:0)

我将使用replace()方法将0替换为np.nan,然后使用方法interpolate()

df.replace(to_replace=0, value=np.nan, inplace=True)
df.interpolate(inplace=True)

                     Number
Date                       
2012-01-31 00:00:00   676.0
2012-02-29 00:00:00   673.0
2012-03-31 00:00:00   670.0
2012-04-30 00:00:00   669.0
2012-05-31 00:00:00   668.0