如何根据其他数据框对数据框进行排序?

时间:2019-02-06 10:13:45

标签: python dataframe

我的问题与this one非常相似,但使用Python。此外,我还希望可以选择是否保留索引,还可以删除其条目未出现在参考数据帧中的所有行。

1 个答案:

答案 0 :(得分:0)

您可以将要为其排序其他DataFrame的列用作索引:

import pandas as pd
d1 = ['23.OH3', '28.OG2', '28.OI1', '40.OE1', '50.OF1']
d2 = ['28.OI1', '23.OH3', '40.OE1', '28.OG2']

abc_d = {'batch_id': [1, 1, 2, 2, 3], 'file_number': d1}
xyz_d = {'file_name': d2}

abc = pd.DataFrame(data = abc_d)
xyz = pd.DataFrame(data = xyz_d)

idx = pd.Index(xyz.file_name)
abc.set_index('file_number').loc[idx].reset_index()

只要len(abc) >= len(xyz)就会起作用,xyz中丢失的行将被删除。

编辑:您可以删除丢失的行,而不考虑len(abc)len(xyz)的方式:

d1 = ['23.OH3', '28.OG2', '28.OI1', '40.OE1']
d2 = ['28.OI1', '23.OH3', '40.OE1', '28.OG2', '50.OF1']

abc_d = {'batch_id': [1, 1, 2, 2], 'file_number': d1}
xyz_d = {'file_number': d2}

abc = pd.DataFrame(data = abc_d)
xyz = pd.DataFrame(data = xyz_d)

idx = pd.Index(xyz.file_number)
not_missing = xyz.file_number.isin(abc.file_number)
idx = idx[not_missing]
abc.set_index('file_number').loc[idx].reset_index()