Python:根据给定的索引,使用现有df中的行创建新的数据帧

2024-09-27 23:18:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Dataframe,我需要创建一个新的Dataframe,当一行在某个列中与另一行具有相同的元素时,第二次出现的行应该直接移动到包含第一次出现的行的下面。我担心这可能很难解释,但希望通过例子能更清楚

我有这样一个df:(重要的一栏是‘方向’)

    Node  |  Feature | Indicator | Value | Class | Direction
    --------------------------------------------------------
    1     |  WPS     |     <=    | 0.27  | 4     | 1 -> 2  
    --------------------------------------------------------
    2     |  ABC     |     <=    | 0.40  | 5     | 2 -> 3
    --------------------------------------------------------
    3     |  CXC     |     <=    | 0.45  | 2     | 3 -> 4
    --------------------------------------------------------
    4     |  WPS     |     <=    | 0.56  | 1     | 1 -> 5
    --------------------------------------------------------
    5     |  ABC     |     <=    | 0.30  | 3     | 2 -> 5
   --------------------------------------------------------
    6     |  CXC     |     <=    | 0.55  | 5     | 3 -> 1

方向上的第一个数字出现两次时(对于节点(1&;4) ,(2&;5) 和(3&;6) ,我希望第二次出现的行(节点4、5和6)直接移动到另一行的下面

我需要这样的结果:

    Node  |  Feature | Indicator | Value | Class | Direction
    --------------------------------------------------------
    1     |  WPS     |     <=    | 0.27  | 4     | 1 -> 2  
    --------------------------------------------------------
    4     |  WPS     |     <=    | 0.56  | 1     | 1 -> 5
    --------------------------------------------------------
    2     |  ABC     |     <=    | 0.40  | 5     | 2 -> 3
    --------------------------------------------------------
    5     |  ABC     |     <=    | 0.30  | 3     | 2 -> 5
    --------------------------------------------------------
    3     |  CXC     |     <=    | 0.45  | 3     | 3 -> 4
    --------------------------------------------------------
    6     |  CXC     |     <=    | 0.55  | 5     | 3 -> 1

我花了这么长时间试图想出一个解决办法,所以如果有人能帮助我,我将非常感激

我现在想做的是:

创建一个包含['Direction']列中第一个整数的列表: 第一个输入值=[1,2,3,1,2,3]

然后,我尝试在第一个int中找到第一次和第二次出现的索引,我希望通过索引来访问数据帧的行

first_ind_ls = []
second_ind_ls = []

    for i in firstInt_ls:
        # Find the indexes of the first and second occurance
        first_ind = firstInt_ls.index(i, 0)
        second_ind = firstInt_ls.index(i, first_ind+1)
        first_ind_ls.append(first_ind)
        second_ind_ls.append(second_ind)

这将产生:

print(first_ind_ls)
>> [1, 2, 3, 1, 2, 3]
print(second_ind_ls)
>> [4, 5, 6]

我从第一个索引中删除所有重复项,以便两个列表的大小相同

# Resulting lists:
>> [1, 2, 3]
>> [4, 5, 6]

现在我想遍历我的数据帧,取第一个索引中第一个索引处的行(即1)并添加到新的数据帧,然后取第二个索引中第一个索引处的行(即4)并将其添加到新的数据帧。然后继续,直到得到如上所述的数据帧

我已经尝试的是没有任何工作,所以我不会麻烦张贴的代码,除非要求

我真的很难弄清楚如何循环使用我的df并访问行,同时循环使用包含索引的两个列表,然后在每个索引处向新df添加行

我只是不知道如果有人有什么建议我会非常感激。我对编程很陌生,所以我想我看待问题的方式可能是错误的


Tags: 数据dataframedf列表方向lsfirstamp
1条回答
网友
1楼 · 发布于 2024-09-27 23:18:51

如果我理解正确,排序的唯一键是Direction列中的第一个元素。我假设Directionstring类型。所以看看这个非常简单的方法是否适合你

创建一个键列(不是绝对需要,但需要澄清)

df['key'] = df['Direction'].apply(lambda x: x.split()[0])

然后对key上的值进行排序

df.sort_values('key')

这有用吗?还是我遗漏了什么

相关问题 更多 >

    热门问题