如何添加一个新列,使其具有先前计算出的每个范围的第一个值,并并排重复这些值(在范围内)?
这是我用来创建“类别”的代码:
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],'')
...但是仍然不起作用 这就是我想要的:
有人有什么建议吗?
谢谢!
答案 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]
但仍然....这段代码解决了这个问题。
也许有人可以帮助我减少或简化我的代码。