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
添加回答
举报