如何计算平均值,以这种格式从数据帧中删除NaN和离群值?

我有以下格式的数据框:

Original Dataframe

    |  x  |  value1  |  value2  |  value3  |  value4
 ---|-----|----------|----------|----------|-----------
  0 |  1  |    1     |   NaN    |    3     |   1
  1 |  2  |    4     |   NaN    |    1     |   NaN
  2 |  3  |    2     |    6     |    1     |   2
  3 |  4  |    1     |    1     |    2     |   1

我的目标是针对每行得出平均值,删除NaN并消除异常值。目标是达到具有以下格式的新数据框:

Desired Dataframe

    |  x  |  mean (after dropping the NaN and the outliers)*
 ---|-----|--------
  0 |  1  |   a
  1 |  2  |   b   
  2 |  3  |   c   
  3 |  4  |   d   

*请注意,a,b,c,d是平均值(我没有计算结果)


达到结果后的最终目标是随时间打印值图表。


使用单个值列表,例如等效于一列值和一列索引,我可以执行所有操作:删除NaN,计算Z分数,然后返回值列表,如下所示:

import pandas as pd   
import numpy as np
from scipy import stats

data = {'value': [1, 2, 15, np.NaN, 2, 2, 2, 3, 1, 1], 
        'x': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}
df = pd.DataFrame(data)

df.dropna(inplace=True)
df = df[(np.abs(stats.zscore(df['return'])) < 2)]

当我尝试批量工作时,会出现一些问题(并且我肯定会出现这些问题,因为我习惯于使用循环进行编程,并且在熊猫中必须有一种“智能”方式来执行此操作)。

存在NaN值时,我无法计算Z分数。我收到此错误:

/home/jupyterlab/conda/lib/python3.6/site-packages/ipykernel_launcher.py:14: RuntimeWarning: invalid value encountered in less

因此,我知道我需要消除NaN。但是我不能以这种数据帧格式进行操作,因为这将意味着消除行或列,从而导致信息丢失。

我尝试不成功的另一种方法是将该表转换为长格式,这意味着我可以:

    |  x  |  valueName  |  actualValue
 ---|-----|-------------|--------------
  0 |  1  |  value1     |      1       
  1 |  1  |  value2     |     NaN    
 ...  ...      ...            ...
  2 |  2  |  value2     |      4  
  3 |  2  |  value2     |     NaN

这使我放弃了Nan,但是要使用Z分数则更成问题。我敢肯定这是一个普遍的问题,但是我无法弄清楚如何解决它。

耶斯列尔

您可以使用:

from scipy import stats

#reshape to MultiIndex Series for remove NaNs
s = df.set_index('x').stack()
print (s)
x        
1  value1    1.0
   value3    3.0
   value4    1.0
2  value1    4.0
   value3    1.0
3  value1    2.0
   value2    6.0
   value3    1.0
   value4    2.0
4  value1    1.0
   value2    1.0
   value3    2.0
   value4    1.0
dtype: float64

#count zsore by first level of group - by x
s1 = s.groupby(level=0).transform(lambda x: np.abs(stats.zscore(x)))
print (s1)
x        
1  value1    0.707107
   value3    1.414214
   value4    0.707107
2  value1    1.000000
   value3    1.000000
3  value1    0.390567
   value2    1.692456
   value3    0.911322
   value4    0.390567
4  value1    0.577350
   value2    0.577350
   value3    1.732051
   value4    0.577350

#filter by condition and get mean by first level x, convert to DataFrame
s2 = s[s1 < 2].mean(level=0).reset_index(name='mean')
print (s2)
   x      mean
0  1  1.666667
1  2  2.500000
2  3  2.750000
3  4  1.250000

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何计算列表中数据帧的平均值?

如何计算数据帧每一行中特定值的平均值?

如何用数据帧的NaN删除第一行和最后一行,并用上下两个值的平均值替换其余的NaN?

如何计算每个csv数据帧列表的平均值

如何重新格式化数据框以计算R中的基本值(平均值,SD,SE等)?

如何计算R中未对齐的数据帧列的平均值

R:如何计算数据帧中每个第 n 个间隔的平均值?

如何计算R中每一行的数据帧块的累积平均值

如何计算pandas数据帧中每个行子集的移动平均值?

R中的数据帧:计算数据帧中行的平均值,而忽略值为'0'的条目

计算数据框中列的最大值、平均值和最小值

如何用行平均值替换熊猫数据透视表的0和nan值?

如何用熊猫DataFrame中的先前值和后继值的平均值替换NaN?

如何计算每组的平均值和最频繁的值?

java中的数据类型和计算平均值

如何在列表中删除重复的“键”并计算值的平均值

如何计算不同行对的平均值并从数据框中删除 N-1 行?

R使用group_by计算数据框中的平均值和值之和

如何计算pandas数据框中列中特定值的平均值?

如何计算 Pandas 中各类数据的每日平均值?

如何计算数据框中的平均值?

扑-如何计算列表中数据的平均值?

如何使用json数据计算Angular中的平均值

如何计算R Studio中数据集的平均值?

如何忽略零值来计算数据框中的平均值

如何计算一列中的n个值和整体平均值?

与许多R数据帧的行值相交并计算相应值的平均值

如何获取Julia中数据帧所有列的算术平均值,最小值和最大值?

从我的数据帧计算加权平均值