根据其他数据帧熊猫重新排序并从数据框中选择子集

时间:2016-03-02 00:22:10

标签: python pandas dataframe

我有两个数据帧,第一个是基数,第二个是子集。我希望基数决定子集的排序。

unit1 = ["Tom", "Dick", "Harry", "Alice", "Bob", "Carol"]
unit2 = ["Harry", "Alice", "Tom", "Carol"]
count1 = [6000, 5554, 4346, 3848, 2210, 1112]
count2 = [300, 25, 534, 8480]

df1 = pd.DataFrame(count1, index=unit1)
df2 = pd.DataFrame(count2, index=unit2)

dict_of_ward_totals = {}
for row in zip(df1.index, df1[0]):
    t1 = [df2[df2.index.isin([row[0]])]]
    if not t1[0].empty:
        dict_of_ward_totals.update({row[0] : int(t1[0].values)})
stake_month = pd.DataFrame.from_dict(dict_of_ward_totals, orient='index')

我的目标是将df2分类为Tom,Harry,Alice,Carol

上述尝试尝试通过DF1,然后使用生成的dict创建一个新的数据帧,它不起作用,因为它给出了DF2的索引值

1 个答案:

答案 0 :(得分:1)

In [132]: df2.loc[df1[0].argsort().index].dropna()
Out[132]:
            0
Tom     534.0
Harry   300.0
Alice    25.0
Carol  8480.0

应该这样做。 argsort将返回排序df1的位置。

In [133]: df1[0].argsort()
Out[133]:
Tom      5
Dick     4
Harry    3
Alice    2
Bob      1
Carol    0
Name: 0, dtype: int64

我们使用索引来切片df2。这引入了NaNs,我们放弃了。