Pandas按字符串和整数对列进行排序

时间:2016-10-13 22:57:09

标签: python sorting pandas

我有一个包含整数和字符串的列的数据框:

>>> df = pd.DataFrame({'a':[2,'c',1,10], 'b':[5,4,0,6]})
>>> df
    a  b
0   2  5
1   c  4
2   1  0
3  10  6

我想按列a对数据帧进行排序,分别用字符串处理字符串和整数:

>>> df
    a  b
1   c  4
2   1  0
0   2  5
3  10  6

...但Python不允许将整数与字符串进行比较。

TypeError: unorderable types: int() > str()

如果我先将所有整数转换为字符串,我就得不到我想要的东西:

>>> df.a = df.a.astype(str)
>>> df.sort(columns='a')
    a  b
0   1  0
3  10  6
2   2  5
1   c  4

有没有人知道一种单线方式告诉Pandas我希望它首先对字符串进行排序,然后是整数,而不先将数据帧分成几部分?

1 个答案:

答案 0 :(得分:1)

一种选择是按照a列的数据类型对数据框进行分组,然后分别对每个组进行排序:

df.groupby(df.a.apply(type) != str).apply(lambda g: g.sort('a')).reset_index(drop = True)

enter image description here