根据另一个数据框的列对数据框列进行排序

Aditya parikh

我有2个数据帧df和df1,并且都具有这样的文件路径。

    df = pd.DataFrame({"X1": ['f','f','o','o','b','b'],
"X2": ['fb/FOO1/bar0.wav','fb/FOO1/bar1.wav','fb/FOO2/bar2.wav','fb/FOO2/bar3.wav','fb/FOO3/bar4.wav','fb/FOO3/bar5.wav']})


    X1  X2
0   f   fb/FOO1/bar0.wav
1   f   fb/FOO1/bar1.wav
2   o   fb/FOO2/bar2.wav
3   o   fb/FOO2/bar3.wav
4   b   fb/FOO3/bar4.wav
5   b   fb/FOO3/bar5.wav

还有另一个数据框

 df1 = pd.DataFrame({"X1": ['b','o','b','f','o','f'],
"X2": ['fb1/FOO3/bar5.opus','fb1/FOO2/bar2.opus','fb1/FOO3/bar4.opus','fb1/FOO1/bar1.opus','fb1/FOO2/bar3.opus','fb1/FOO1/bar0.opus']})

    X1  X2
0   b   fb1/FOO3/bar5.opus
1   o   fb1/FOO2/bar2.opus
2   b   fb1/FOO3/bar4.opus
3   f   fb1/FOO1/bar1.opus
4   o   fb1/FOO2/bar3.opus
5   f   fb1/FOO1/bar0.opus

现在,我想根据第一个数据帧df的文件路径对第二个数据帧df1的X2列(文件路径)进行排序。这样,输出应该像这样

    X1  X2
0   f   fb1/FOO1/bar0.opus
1   f   fb1/FOO1/bar1.opus
2   o   fb1/FOO2/bar2.opus
3   o   fb1/FOO2/bar3.opus
4   b   fb1/FOO3/bar4.opus
5   b   fb1/FOO3/bar5.opus
塞巴斯蒂安·D

您可以创建一个排序字典,使您可以使用自定义键对值进行排序:

#the following is creating a key with the name part of the filepath (could have been done with regex)
sorter_dict = dict(zip(df.X2.apply(lambda x : x.split('/')[-1].split('.')[0]),df.index))
#{'bar0': 0, 'bar1': 1, 'bar2': 2, 'bar3': 3, 'bar4': 4, 'bar5': 5}

#on df1, let's create a temp col with the name part of the filepath
df1['temp'] = df1.X2.apply(lambda x : x.split('/')[-1].split('.')[0])
#and apply our sorter dict
df1['sorter'] = df1.temp.map(sorter_dict)
#at the end, simply sort
df1 = df1.sort_values('sorter')
#and delete unecessary cols
del df1['temp'], df1['sorter']

输出量

| X1   | X2                 |
|:-----|:-------------------|
| f    | fb1/FOO1/bar0.opus |
| f    | fb1/FOO1/bar1.opus |
| o    | fb1/FOO2/bar2.opus |
| o    | fb1/FOO2/bar3.opus |
| b    | fb1/FOO3/bar4.opus |
| b    | fb1/FOO3/bar5.opus |

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据另一个数据框的多个列过滤数据框

如何按R中的另一个数据框对数据框中的列顺序进行排序?

如何根据熊猫中另一个数据框中的列对数据框进行排序?

根据Python中另一个数据框的列对一个数据框的行进行排序(重复的列)

根据另一个数据框的列值过滤数据框

如何根据另一个数据框上的列对数据框的行进行分类?

根据另一个数据框的列值创建一个数据框

如何基于来自另一个数据框的列对数据框进行子集化?

根据另一个数据框对数据框的列进行分组

根据变量组合,对数据框1的新列进行突变,并与另一个数据框2中的值进行匹配

当我尝试根据另一个数据框的列中的值对数据框进行子集化时发生错误

根据R中另一个排序后的列值对数据框进行排序

根据另一个数据框向熊猫数据框列添加值

根据另一个数据框的列填充熊猫数据框列

根据另一个数据框计算数据框中的列值

根据另一个因子列对R数据框中的因子列进行排序

根据给熊猫中另一个数据框中的列赋予的条件对数据框中的列执行操作

根据条件为另一个数据框的数据框列设置值

根据python中另一个数据框的2列过滤数据框

根据另一个数据框值对熊猫值进行排序

根据另一个数据框中的信息对数据框进行分类

根据另一个数据框的值删除一个数据框的行和列

根据另一个定制顺序的列对数据框中的列对进行排序

根据另一个数据框的值对数据框条目进行分组

按一个因子列升序对数据框进行排序,另一个因子降序

如何根据另一个数据框中的值对数据框进行子集化

根据条件用另一个数据框替换数据框列 - R

如何根据另一个数据框列值对数据框进行排序?

根据另一个数据框列更新数据框列,无需 for 循环