根据不同的列值条件从列值形成数组

时间:2018-01-31 16:37:34

标签: python numpy conditional-statements average multiple-columns

我有以下数据集。

  1. 10
  2. 20
  3. 30
  4. 40
  5. 50
  6. 60
  7. 70
  8. 80
  9. 90
  10. 100
  11. 我的目标是将第2列中的值替换为两个连续值的平均值,此时第1列中的值保持小于5且大于6.准确地说,在< 5范围内第1列中的值是1,2,3和4,相应的第2列值是10,20,30,40。所以,我想取(10,20)= 15和(30,40)= 35的平均值。我想在第1列的范围> 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. nan nan nan nan nan nan 50. 60. nan nan nan nan   nan nan nan 75. 95。]

    我的预期输出是: [15. 35. 50. 60. 75. 95。]

    如何在我的代码中解决np.nan的任何帮助都会非常有用。

2 个答案:

答案 0 :(得分:1)

这就是你想要的

a=np.vstack((np.arange(1,11),np.arange(10,110,10))).T
b=(a[:-1,1]+a[1:,1])/2
indL=np.argmax(a[:,0]>5)-1
indH=np.argmax(a[:,0]>6)
out=np.hstack((b[:indL:2],a[indL:indH,1],b[indH::2]))

答案 1 :(得分:1)

我真的很难在这里看到你更大的概念。对于你非常具体的问题,这将有效:

public class ModelToPersistBetweenFormSubmits()
{
    public string field1 { get; set;}
    public string field2 { get; set;}
    public string field3 { get; set;}
    public string field4 { get; set;}
    public string GetHiddenFields(string excludeFields = "")
    {


            string[] excludeFieldList = excludeFields.Split(',');
            string val = string.Empty;
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            foreach (System.Reflection.PropertyInfo property in this.GetType().GetProperties())
            {
                if (excludeFieldList.Contains(property.Name))
                {
                    continue;
                }
                else if (property.GetIndexParameters().Length > 0)
                {
                    val = string.Empty; //sb.Append("Indexed Property cannot be used");
                }

                else 
                {
                    val = (property.GetValue(this, null) ?? "").ToString();
                }
                sb.Append(string.Format("<input type='hidden' id='{0}' name='{0}' value='{1}'/>", property.Name, val));

                sb.Append(System.Environment.NewLine);
            }

            return sb.ToString();
        }
}



//render hidden fields except for current inputs

@Html.Raw(Model.GetHiddenFields("field4,field3"))

但是如果要排除例如x = 4和6,那么你的预期输出是多少?然后你有几个奇异的值,你没有给出任何指令,它们在平均过程中会发生什么。