【发布时间】:2018-07-10 20:28:41
【问题描述】:
我有以下数据集。
- 10
- 20
- 30
- 40
- 50
- 60
- 70
- 80
- 90
- 100
当第 1 列中的值保持小于 5 且大于 6 时,我的目标是用两个连续值的平均值替换第 2 列中的值。准确地说,在 6 范围内执行相同的操作,取相应第 2 列值 (70,80)=75 和 (80,90)=95 的平均值。当第 1 列的值不属于这两个范围(5 和 6)和相应的第 2 列值(50 和 60)时,我不会取第 2 列值的平均值,最后根据这三个条件创建第 2 列值的数组.
我尝试了以下方法:
import numpy as np
import pandas as pd
data= pd.read_table('/Users/Hrihaan/Desktop/Data.txt', dtype=float, header=None, sep='\s+').values
t=data[:,0]
df = pd.DataFrame({"x":t, "y":data[:,1]})
x=np.where(t<=4,data[:,1],np.nan)
x_1=np.nanmean(x.reshape(-1, 2), axis=1)
y=np.where((df.x>4)&(df.x<7), df.y,np.nan)
z=np.where(t>6,data[:,1],np.nan)
z_1=np.nanmean(z.reshape(-1, 2), axis=1)
A=np.concatenate((x_1,y,z_1), axis=0)
print(A)
我得到以下输出: [ 15. 35. 楠楠 楠楠 楠楠 50. 60. 楠楠楠楠 楠楠楠75. 95.]
我的预期输出是: [15. 35. 50. 60. 75. 95.]
任何关于如何在我的代码中绕过 np.nan 的帮助都会非常有帮助。
【问题讨论】:
-
我没有得到预期的输出。你说,你想替换第 2 列中的值,但是你的输出会生成更少的元素。
-
感谢您的评论,我再次运行了我的代码,我得到了上面提到的输出@Piinthesky
-
您的预期输出有六个元素,但您想替换十个值。还是您的预期输出是一个包含六个元素的 numpy 数组?
-
是的,我的输出现在将是 6 个元素而不是 10 个,我正在根据三个条件缩小 Column2。
标签: python numpy conditional-statements average multiple-columns