我有一个看起来像这样的数据框:
username group
user1 [A]
user2 [B, C]
user3 [A, B, C]
user4 [A, B]
我希望结果看起来像这样:
username group
user3 [A, B, C]
user4 [A, B]
user2 [B, C]
user1 [A]
我已经查看了有关sort_values的文档,它似乎主要涵盖了0-9或A-Z排序。.预先感谢
答案 0 :(得分:7)
一种方法是使用长度创建一个新列,然后按其排序:
df['len'] = df['group'].str.len()
df.sort_values(by='len', ascending=False).drop(columns='len')
输出为:
group
2 (A, B, C)
1 (B, C)
3 (A, B)
0 (A,)
答案 1 :(得分:3)
只需将它丢掉作为选择:
template <typename, typename...>
struct OneOf;
template <typename T0, typename T1, typename ... Ts>
struct OneOf<T0, T1, Ts...> {
union {
T0 value;
OneOf<T1, Rest...> rest;
};
};
template <typename T0>
struct OneOf<T0> {
T0 value;
};
答案 2 :(得分:0)
您可以尝试在数据框中添加一列,以存储列表的长度,然后进行排序:
import pandas as pd
df = pd.DataFrame(data={"A": [[0, 1], [3], [1, 4, 5]]})
# A
# 0 [0, 1]
# 1 [3]
# 2 [1, 4, 5]
df["Length"] = df["A"].str.len()
df.sort_values("Length", ascending=False)
# A Length
# 2 [1, 4, 5] 3
# 0 [0, 1] 2
# 1 [3] 1
如果您不再需要Length
列,则可以将其删除:
df.sort_values("Length", inplace=True, ascending=False)
del df["Length"]
结果:
A
2 [1, 4, 5]
0 [0, 1]
1 [3]
答案 3 :(得分:0)
使用 keys
的 sort_values
的更温和的方式
df.sort_values(by='group', key=lambda x: x.str.len(), ascending=False)
示例:
df = pd.DataFrame(data={"A": [[0, 1], [3], [1, 4, 5]]})
df
A
0 [0, 1]
1 [3]
2 [1, 4, 5]
df.sort_values(by="A", key=lambda x: x.str.len(), ascending=False)
A
2 [1, 4, 5]
0 [0, 1]
1 [3]