新列的第一个值已建立范围

时间:2019-07-18 19:33:28

标签: python excel pandas dataframe

如何添加一个新列,使其具有先前计算出的每个范围的第一个值,并并排重复这些值(在范围内)?

这是我用来创建“类别”的代码:

bins=[0, 0.04439, 0.08878, 0.13317, 0.17756, 0.22195, 0.26634, 0.31073, 
  0.35512, 0.39951, 0.4439, 0.48829, 0.53268, 0.57707, 0.62146, 0.66585, 
   0.71024, 0.75463, 0.79902]

  df3['categories'] = pd.cut(df3['Distance(m)'], bins)

  df8 = df3.groupby('categories')['Hauteur_Acum(cm)'].agg({'max': 'max', 
  'min': 'min', 'average': 'mean'})

这是创建按范围第一个值的DF的代码:

  df81 = df3.groupby('categories')['Hauteur_Acum(cm)'].agg({'value': 
  'first'})

df3是:

                                        Hauteur_Acum(cm)        categories
 0       0.000000    35.760384  ...          0.000000               NaN
 1       0.002222   155.800401  ...          0.047999     (0.0, 0.0444]
 2       0.002963   372.240662  ...          0.538474     (0.0, 0.0444]
 3       0.005185   571.810684  ...          1.094536     (0.0, 0.0444]
 4       0.006666   758.715072  ...          1.243944     (0.0, 0.0444]
 5       0.008888   941.509872  ...          1.246167     (0.0, 0.0444]
 6       0.010369  1022.736674  ...          1.432927     (0.0, 0.0444]
 7       0.012591  1112.566566  ...          1.508076     (0.0, 0.0444]
 8       0.014813  1132.676551  ...          1.417364     (0.0, 0.0444]
 9       0.015554  1114.860993  ...          1.419143     (0.0, 0.0444]

我想插入一个名为df3 ['First_values']的新列,其第一个值重复出现在范围列旁边的范围内。

我尝试了以下代码:

df3['First_value(cm)']= np.where(df3['categories'] == '(0.0, 0.0444]', df81.iat[0,0],'')

...但是仍然不起作用 这就是我想要的:

enter image description here

有人有什么建议吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我一直在尝试许多方法来解决问题,而以下代码是我发现的唯一方法。

每个类别的第一个值

df81 = df3.groupby('categories')['Hauteur_Acum(cm)'].agg({'First_value(cm)': 'first'})

我将df3['categories']重命名为df3['n_cat'],因为它是一个分类序列,对我来说更容易识别为1,2,3,4 ....,直到18个分类。

df3['n_cat'] = df3['categories']

df3['n_cat'] = df3['n_cat'].cat.rename_categories([1, 2, 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18])

我在df81数据框中添加了“数据”列

 df81['data']= [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]

然后,通过标识类别的数量(1、2 ...到18),将df81.iat [0,0]值分配给新的df3 ['donnees']列。

我不喜欢这部分,因为代码太长

df3.loc[df3['n_cat'] == 1, 'donnees'] = df81.iat[0,0]
df3.loc[df3['n_cat'] == 2, 'donnees'] = df81.iat[1,0]
df3.loc[df3['n_cat'] == 3, 'donnees'] = df81.iat[2,0]
df3.loc[df3['n_cat'] == 4, 'donnees'] = df81.iat[3,0]
df3.loc[df3['n_cat'] == 5, 'donnees'] = df81.iat[4,0]
df3.loc[df3['n_cat'] == 6, 'donnees'] = df81.iat[5,0]
df3.loc[df3['n_cat'] == 7, 'donnees'] = df81.iat[6,0]
df3.loc[df3['n_cat'] == 8, 'donnees'] = df81.iat[7,0]
df3.loc[df3['n_cat'] == 9, 'donnees'] = df81.iat[8,0]
df3.loc[df3['n_cat'] == 10, 'donnees'] = df81.iat[9,0]
df3.loc[df3['n_cat'] == 11, 'donnees'] = df81.iat[10,0]
df3.loc[df3['n_cat'] == 12, 'donnees'] = df81.iat[11,0]
df3.loc[df3['n_cat'] == 13, 'donnees'] = df81.iat[12,0]
df3.loc[df3['n_cat'] == 14, 'donnees'] = df81.iat[13,0]
df3.loc[df3['n_cat'] == 15, 'donnees'] = df81.iat[14,0]
df3.loc[df3['n_cat'] == 16, 'donnees'] = df81.iat[15,0]
df3.loc[df3['n_cat'] == 17, 'donnees'] = df81.iat[16,0]
df3.loc[df3['n_cat'] == 18, 'donnees'] = df81.iat[17,0]

但仍然....这段代码解决了这个问题。

也许有人可以帮助我减少或简化我的代码。