2016-03-02 39 views
0

我有兩個數據幀,第一個是基數,第二個是子集。我希望基地爲子集指定排序。重新排序並從數據幀中選擇基於其他數據幀熊貓的子集

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排序湯姆,哈利,愛麗絲,卡羅爾

上述嘗試嘗試去通過DF1,然後創建一個使用所產生的字典一個新的數據幀,這是行不通的因爲它給了我DF2的索引值

回答

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切片。這引入了NaN,我們放棄了。

+1

現貨就像一種魅力。我仍然停留在我的彙編程序日,並沒有看到所有軟件包的威力。我的代碼越來越小,感謝@TomAugspurger的幫助。 – cryptoref