猿问

在Python Dataframe中对附近的列值进行分组

我有一个DataFrame,其中有一些列,例如'n'列,还有一些行,例如'm'行。我想根据一个column(Column:'x')值对DataFrame行进行分组,而不是完全匹配column'x'值。我需要对附近的值进行分组。例如我的DataFrame将是这样的:


      y    yh     x    xw       w   Nxt

0   2987  3129   347  2092  1735.0   501

1   2715  2847   501  1725  1224.0   492

2   2419  2716   490  2196  1704.0   492

3   2310  2373   492   794   302.0   886

4   2309  2370   886  1012   126.0   492

5   2198  2261   497   791   299.0   886

6   2197  2258   886  1010   124.0   492

7   1663  2180   375  1092   600.0  1323

在上面的数据帧中,列“ x”值之间的差在20之间,那么我需要将它们分组到一个新的数据帧中,其余的可以避免。这里index = 1,2,3,5行可以是一个组,而index = 4,6行可以是另一个组,因为这些行“ x”列之间的差在20之间。我的预期输出应该是三个dataframes- df1:一个包含所有分组的行,而df2:则保留另一组行和'df3':其余行,如下所示:


df1:


      y    yh     x    xw       w   Nxt

1   2715  2847   501  1725  1224.0   492

2   2419  2716   490  2196  1704.0   492

3   2310  2373   492   794   302.0   886

5   2198  2261   497   791   299.0   886

df2:


      y    yh     x    xw       w   Nxt

4   2309  2370   886  1012   126.0   492

6   2197  2258   886  1010   124.0   492

df3:


    y    yh     x    xw       w   Nxt

0   2987  3129   347  2092  1735.0   501

7   1663  2180   375  1092   600.0  1323

我尝试了Groupby-apply和groupby-transform,但未能成功。如果有人能帮助我达到预期的效果,那将是很大的帮助,在此先感谢。


慕尼黑5688855
浏览 222回答 2
2回答

米脂

根据我的理解,我已经完成了该问题的实现。group = df.groupby("x").groupsdef neighbour(temp):&nbsp; &nbsp; temp_final = []&nbsp; &nbsp; final = []&nbsp; &nbsp; for i in range(len(temp)):&nbsp; &nbsp; &nbsp; &nbsp; t = []&nbsp; &nbsp; &nbsp; &nbsp; for j in range(len(temp)):&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if abs(temp[i] - temp[j]) <= 20:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; t.append(temp[j])&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pass&nbsp; &nbsp; &nbsp; &nbsp; t = sorted(t)&nbsp; &nbsp; &nbsp; &nbsp; temp_final.append(t)&nbsp; &nbsp; temp_final = list(set(frozenset(sublist) for sublist in final))&nbsp; &nbsp; for i in range(len(temp_final)):&nbsp; &nbsp; &nbsp; &nbsp; u = []&nbsp; &nbsp; &nbsp; &nbsp; for item in temp_final[i]:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; u.append(item)&nbsp; &nbsp; &nbsp; &nbsp; final.append(u)&nbsp; &nbsp; return finaldataframes = {}for i in range(len(val)):&nbsp; &nbsp; key_name = "dataframe_"+str(i)&nbsp; &nbsp; dg = pd.DataFrame()&nbsp; &nbsp; for item in val[i]:&nbsp; &nbsp; &nbsp; &nbsp; index = list(group[item])&nbsp; &nbsp; &nbsp; &nbsp; for i in range(len(index)):&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dg = dg.append(df.iloc[index[i]])&nbsp; &nbsp; dataframes[key_name] = dg如有任何误解,请通知我。dataframes{'dataframe_0':&nbsp; &nbsp; &nbsp; Nxt&nbsp; &nbsp; &nbsp; &nbsp;w&nbsp; &nbsp; &nbsp; x&nbsp; &nbsp; &nbsp; xw&nbsp; &nbsp; &nbsp; &nbsp;y&nbsp; &nbsp; &nbsp; yh5&nbsp; 886.0&nbsp; &nbsp;299.0&nbsp; 497.0&nbsp; &nbsp;791.0&nbsp; 2198.0&nbsp; 2261.02&nbsp; 492.0&nbsp; 1704.0&nbsp; 490.0&nbsp; 2196.0&nbsp; 2419.0&nbsp; 2716.03&nbsp; 886.0&nbsp; &nbsp;302.0&nbsp; 492.0&nbsp; &nbsp;794.0&nbsp; 2310.0&nbsp; 2373.01&nbsp; 492.0&nbsp; 1224.0&nbsp; 501.0&nbsp; 1725.0&nbsp; 2715.0&nbsp; 2847.0, 'dataframe_1':&nbsp; &nbsp; &nbsp; &nbsp;Nxtw&nbsp; &nbsp; &nbsp; x&nbsp; &nbsp; &nbsp; xw&nbsp; &nbsp; &nbsp; &nbsp;y&nbsp; &nbsp; &nbsp; yh0&nbsp; &nbsp;501.0&nbsp; 1735.0&nbsp; 357.0&nbsp; 2092.0&nbsp; 2987.0&nbsp; 3129.07&nbsp; 1323.0&nbsp; &nbsp;600.0&nbsp; 375.0&nbsp; 1092.0&nbsp; 1663.0&nbsp; 2180.0, 'dataframe_2':&nbsp; &nbsp; &nbsp; Nxt&nbsp; &nbsp; &nbsp;&nbsp;w&nbsp; &nbsp; &nbsp; x&nbsp; &nbsp; &nbsp; xw&nbsp; &nbsp; &nbsp; &nbsp;y&nbsp; &nbsp; &nbsp; yh4&nbsp; 492.0&nbsp; 126.0&nbsp; 886.0&nbsp; 1012.0&nbsp; 2309.0&nbsp; 2370.06&nbsp; 492.0&nbsp; 124.0&nbsp; 886.0&nbsp; 1010.0&nbsp; 2197.0&nbsp; 2258.0}这是输出。
随时随地看视频慕课网APP

相关分类

Python
我要回答