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

Python 具有已建立范围的第一个值的新列,python,excel,pandas,dataframe,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['categ

如何添加一个新列,其中包含以前计算的每个范围的第一个值,并将这些值并排重复(在范围内)

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

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']的新列,第一个值在range列旁边的range内重复出现

我尝试过以下代码:

df3['First_value(cm)']= np.where(df3['categories'] == '(0.0, 0.0444]', df81.iat[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])
我将“data”列添加到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]
但还是。。。。这段代码解决了这个问题


也许有人能帮我简化代码。

我已经尝试了很多方法来解决这个问题,下面的代码是我唯一找到的

每个类别的第一个值

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])
我将“data”列添加到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]
但还是。。。。这段代码解决了这个问题

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