![](/img/trans.png)
[英]Sort by one column, then group by another, in Pandas Dataframe?
[英]Sort dataframe by another on one column - pandas
假設我必須進行數據幀處理,如下所示:
df=pd.DataFrame({'a':[1,4,3,2],'b':[1,2,3,4]})
df2=pd.DataFrame({'a':[1,2,3,4],'b':[1,2,3,4],'c':[34,56,7,55]})
我想排序df
由順序數據df2
的數據'a'
列,所以df.a
柱將順序df2.a
並且這使得整個數據幀的順序。
所需的輸出:
a b
0 1 1
1 2 4
2 3 3
3 4 2
(手動制作,如果有任何錯誤,請告訴我:D)
我自己的嘗試:
df = df.set_index('a')
df = df.reindex(index=df2['a'])
df = df.reset_index()
print(df)
如預期般運作!!!
但是,當我有更長的數據幀時,例如:
df=pd.DataFrame({'a':[1,4,3,2,3,4,5,3,5,6],'b':[1,2,3,4,5,5,5,6,6,7]})
df2=pd.DataFrame({'a':[1,2,3,4,3,4,5,6,4,5],'b':[1,2,4,3,4,5,6,7,4,3]})
它不能正常工作。
注意:我不僅要解釋原因,還需要針對大數據幀的解決方案
一種可能的解決方案是在兩個DataFrame
中都創建輔助列,因為值重復:
df['g'] = df.groupby('a').cumcount()
df2['g'] = df2.groupby('a').cumcount()
df = df.set_index(['a','g']).reindex(index=df2.set_index(['a','g']).index)
print(df)
b
a g
1 0 1.0
2 0 4.0
3 0 3.0
4 0 2.0
3 1 5.0
4 1 5.0
5 0 5.0
6 0 7.0
4 2 NaN
5 1 6.0
或者也許需要merge
:
df3 = df.merge(df2[['a','g']], on=['a','g'])
print(df3)
a b g
0 1 1 0
1 4 2 0
2 3 3 0
3 2 4 0
4 3 5 1
5 4 5 1
6 5 5 0
7 5 6 1
8 6 7 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.