为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕尼黑5688855 2021-05-01 03:55:03
我有一个DataFrame,其中有一些列,例如'n'列,还有一些行,例如'm'行。我想根据一个column(Column:'x')值对DataFrame行进行分组,而不是完全匹配column'x'值。我需要对附近的值进行分组。例如我的DataFrame将是这样的:      y    yh     x    xw       w   Nxt0   2987  3129   347  2092  1735.0   5011   2715  2847   501  1725  1224.0   4922   2419  2716   490  2196  1704.0   4923   2310  2373   492   794   302.0   8864   2309  2370   886  1012   126.0   4925   2198  2261   497   791   299.0   8866   2197  2258   886  1010   124.0   4927   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   Nxt1   2715  2847   501  1725  1224.0   4922   2419  2716   490  2196  1704.0   4923   2310  2373   492   794   302.0   8865   2198  2261   497   791   299.0   886df2:      y    yh     x    xw       w   Nxt4   2309  2370   886  1012   126.0   4926   2197  2258   886  1010   124.0   492df3:    y    yh     x    xw       w   Nxt0   2987  3129   347  2092  1735.0   5017   1663  2180   375  1092   600.0  1323我尝试了Groupby-apply和groupby-transform,但未能成功。如果有人能帮助我达到预期的效果,那将是很大的帮助,在此先感谢。
查看完整描述

2 回答

?
米脂

TA贡献1836条经验 获得超3个赞

根据我的理解,我已经完成了该问题的实现。


group = df.groupby("x").groups


def neighbour(temp):

    temp_final = []

    final = []

    for i in range(len(temp)):

        t = []

        for j in range(len(temp)):

            if abs(temp[i] - temp[j]) <= 20:

                t.append(temp[j])

            else:

                pass

        t = sorted(t)

        temp_final.append(t)


    temp_final = list(set(frozenset(sublist) for sublist in final))

    for i in range(len(temp_final)):

        u = []

        for item in temp_final[i]:

            u.append(item)

        final.append(u)


    return final


dataframes = {}

for i in range(len(val)):

    key_name = "dataframe_"+str(i)

    dg = pd.DataFrame()

    for item in val[i]:

        index = list(group[item])

        for i in range(len(index)):

            dg = dg.append(df.iloc[index[i]])


    dataframes[key_name] = dg

如有任何误解,请通知我。


dataframes


{'dataframe_0':      Nxt       w      x      xw       y      yh

5  886.0   299.0  497.0   791.0  2198.0  2261.0

2  492.0  1704.0  490.0  2196.0  2419.0  2716.0

3  886.0   302.0  492.0   794.0  2310.0  2373.0

1  492.0  1224.0  501.0  1725.0  2715.0  2847.0, 'dataframe_1':       Nxt

w      x      xw       y      yh

0   501.0  1735.0  357.0  2092.0  2987.0  3129.0

7  1323.0   600.0  375.0  1092.0  1663.0  2180.0, 'dataframe_2':      Nxt      

w      x      xw       y      yh

4  492.0  126.0  886.0  1012.0  2309.0  2370.0

6  492.0  124.0  886.0  1010.0  2197.0  2258.0}

这是输出。


查看完整回答
反对 回复 2021-05-11
  • 2 回答
  • 0 关注
  • 221 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信