我有一个数据框,我需要创建一个新的,当某一列中的某行与另一行具有相同的元素时,第二次出现的行应该直接移动到包含第一次出现的行下方。恐怕这可能很难解释,但希望通过示例会更清楚。
我有一个这样的 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'] 列中第一个整数的列表: first_Ints_ls = [1, 2, 3, 1, 2, 3]
然后我尝试在 first_Ints_ls 中找到第一次和第二次出现的索引,我希望用它来通过索引访问 Dataframe 的行。
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]
我从 first_ind_ls 中删除了任何重复项,以便两个列表的大小相同。
# Resulting lists:
>> [1, 2, 3]
>> [4, 5, 6]
现在我想遍历我的 Dataframe 并获取 first_ind_ls 中第一个索引处的行(即 1)并添加到新数据框中,然后获取位于 second_ind_ls 的第一个索引处的行(即 4)并添加到新的数据框。并继续直到我最终得到一个如上所述的数据框。
我已经尝试过的根本不起作用,所以除非有要求,否则我不会费心发布代码。
我真的很难弄清楚如何遍历我的 df 并访问行,同时遍历包含索引的两个列表,然后将每个索引处的行添加到新的 df ...
我只是不知道还能做什么,如果有人有任何建议,我将不胜感激。我对编程很陌生,所以我想我看待问题的方式可能是错误的
如果我理解正确,排序的唯一关键是Direction
列中的第一个元素。我假设Direction
是类型string
。所以看看这个实际上非常简单的天真的方法是否适合你。
创建一个键列(不是绝对需要,但为了澄清)
df['key'] = df['Direction'].apply(lambda x: x.split()[0])
然后对这个值进行排序 key
df.sort_values('key')
这行得通吗?或者我错过了什么?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句