3 回答

TA貢獻1995條經驗 獲得超2個贊
這是您要找的嗎:
>>> from datatable import dt, f, sort, ifelse
>>> df1 = dt.Frame(C1=['a', 'a', 'b', 'c'],
C2=['b', 'c', 'a', 'a'],
Values=[5, 10, 15, 20])
>>> df1[:, :, sort(ifelse(f.C1<f.C2, f.C1, f.C2),
ifelse(f.C1<f.C2, f.C2, f.C1))]
| C1 C2 Values
-- + -- -- ------
0 | a b 5
1 | b a 15
2 | a c 10
3 | c a 20
[4 rows x 3 columns]
這里我們按 2 個計算列對框架進行排序,第一個是 C1 和 C2 中的最小值,第二個是 C1 和 C2 中的最大值。

TA貢獻1851條經驗 獲得超4個贊
嘗試這個:
import pandas as pd
C1 = ['a', 'a', 'b', 'c']
C2 = ['b', 'c', 'a', 'a']
Values = [5, 10, 15, 20]
df = pd.DataFrame({'C1': C1, 'C2': C2, 'Values': Values})
srt = df.apply(lambda x: ','.join(sorted(x[['C1', 'C2']].values)),axis=1)
df.loc[srt.argsort(),:]

TA貢獻1898條經驗 獲得超8個贊
轉換為 后pandas,我們可以sort_values嘗試numpy.sort
import numpy as np
df1 = df1.to_pandas()
out = df1.iloc[pd.DataFrame(np.sort(df1.values,1)).sort_values([0,1]).index]
Out[54]:
C1 C2
0 a b
2 b a
1 a c
3 c a
添加回答
舉報