如何用熊猫数据框中第一行和相应行之间的列平均值填充特定值

d

我有这样的df,

A   B   C   D   E
1   2   3   0   2
2   0   7   1   1
3   4   0   3   0
0   0   3   4   3

我正在尝试在第一行和对应列的0值行之间用mean()值替换所有0,

我的预期输出是

A       B       C           D       E
1.0     2.00    3.000000    0.0     2.0
2.0     1.00    7.000000    1.0     1.0
3.0     4.00    3.333333    3.0     1.0
1.5     1.75    3.000000    4.0     3.0
耶斯列尔

这是主要问题,mean如果0每列有多个需要先前的,因此创建向量化解决方案确实有问题:

def f(x):
    for i, v in enumerate(x):
        if v == 0: 
            x.iloc[i] = x.iloc[:i+1].mean()
    return x

df1 = df.astype(float).apply(f)
print (df1)

     A     B         C    D    E
0  1.0  2.00  3.000000  0.0  2.0
1  2.0  1.00  7.000000  1.0  1.0
2  3.0  4.00  3.333333  3.0  1.0
3  1.5  1.75  3.000000  4.0  3.0

更好的解决方案:

#create indices of zero values to helper DataFrame
a, b = np.where(df.values == 0)
df1 = pd.DataFrame({'rows':a, 'cols':b})
#for first row is not necessary count means
df1 = df1[df1['rows'] != 0]
print (df1)
   rows  cols
1     1     1
2     2     2
3     2     4
4     3     0
5     3     1

#loop by each row of helper df and assign means
for i in df1.itertuples():
    df.iloc[i.rows, i.cols] = df.iloc[:i.rows+1, i.cols].mean()

print (df)
     A     B         C  D    E
0  1.0  2.00  3.000000  0  2.0
1  2.0  1.00  7.000000  1  1.0
2  3.0  4.00  3.333333  3  1.0
3  1.5  1.75  3.000000  4  3.0

另一个类似的解决方案(mean所有对中都有):

for i, j in zip(*np.where(df.values == 0)):
    df.iloc[i, j] = df.iloc[:i+1, j].mean()
print (df)

     A     B         C    D    E
0  1.0  2.00  3.000000  0.0  2.0
1  2.0  1.00  7.000000  1.0  1.0
2  3.0  4.00  3.333333  3.0  1.0
3  1.5  1.75  3.000000  4.0  3.0

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

熊猫数据框:获取组中每个子组的第一行的平均值

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

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

从第一行开始获取熊猫数据框列表的移动平均值,而不是最后一行

如何用NA所属行的平均值填充DataFrame中的NaN值,并返回新数据框

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

如何基于Julia中一列中的值查找数据框的行的平均值?

熊猫数据框groupby并填充第一行值

如何获取值之间的平均值,该平均值位于R中的上一行和下一行?

计算列的平均值,第一行除外

如何在熊猫中获取使用另一列值选择的行的平均值

根据行平均值排除熊猫数据框的列

如何用列值的平均值替换数据框列中的几个 NA 值

使用滞后计算SQL中各行之间的平均值,并忽略第一行

r-按第一行计算的平均值和总和值

数据框中任何两个连续行之间的差异的熊猫平均值

熊猫:在一个数据框中交换特定的列值,并计算其加权平均值

熊猫:如何用groupby的平均值填充空值?

无法用相应列中最后三行的平均值替换数据帧最后一行中的零,同时保留非零值

计算熊猫数据框中每5行的平均值和标准差

计算数据框中每一行的滚动平均值

如何使用Scala计算Spark中数据框中数据列的开始索引和结束索引之间的行的平均值?

如何使用前进和后退填充的平均值替换数据框中的NULL值?

一行(两列的平均值)和同一行(另一列的值)的总和

从特定列的数据帧计算每一行的多种平均值

如何为熊猫数据框中的另一列中的特定值更新一行中的列值?

保留熊猫数据框的重复列的第一行和最后一行的值

一行命令可获取大文件中特定列的平均值

如何用滚动平均值在熊猫中填充nan值