在单元格内排序字符串序列

时间:2018-03-08 01:43:51

标签: python string pandas

我在Pandas数据帧的列中有以下数据:

col_1 ,B91-10,B7A-00,B7B-00,B0A-01,B0A-00,B64-03,B63-00,B7B-01 ,B8A-01,B5H-02,B32-02,B57-00 ,B83-01,B83-00,B5H-00 ,B83-01,B83-00 ,B83-00,B83-01 ,B83-00,B92-00,B92-01,B0N-02 ,B91-16

仅供参考:每个字符串都以逗号开头,因此上面的示例有7行。

连续这些不同代码的顺序无关紧要。第3行和第4行(假设索引从0开始)对于我的目的是相同的。

我需要在每一行中订购这些不同的代码,以便我可以准确计算每一行。

换句话说,我需要把它变成这个:

col_1 B0A-00,B0A-01,B63-00,B64-03,B7A-00,B7B-00,B7B-01,B91-10 B32-02,B57-00,B5H-02,B8A-01 B5H-00,B83-00,B83-01 B83-00,B83-01 B83-00,B83-01 B0N-02,B83-00,B92-00,B92-01 B91-16

不知道从哪里开始,因为字符串的值数量不同。我尝试基于逗号进行拆分但是当行在列中具有不同数量的值时却不知道如何对列进行排序。

提前致谢。

1 个答案:

答案 0 :(得分:2)

选项1
如果要按字典顺序对这些进行排序,请使用逗号分隔,然后使用np.sort

v = np.sort(df.col_1.str.split(',', expand=True).fillna(''), axis=1)
df = pd.DataFrame(v).agg(','.join, 1).str.strip(',')

df

0    B0A-00,B0A-01,B63-00,B64-03,B7A-00,B7B-00,B7B-...
1                          B32-02,B57-00,B5H-02,B8A-01
2                                 B5H-00,B83-00,B83-01
3                                        B83-00,B83-01
4                                        B83-00,B83-01
5                          B0N-02,B83-00,B92-00,B92-01
6                                               B91-16

选项2
用逗号分隔并致电apply + sorted

df.col_1.str.split(',').apply(sorted, 1).str.join(',').str.strip(',')

0    B0A-00,B0A-01,B63-00,B64-03,B7A-00,B7B-00,B7B-...
1                          B32-02,B57-00,B5H-02,B8A-01
2                                 B5H-00,B83-00,B83-01
3                                        B83-00,B83-01
4                                        B83-00,B83-01
5                          B0N-02,B83-00,B92-00,B92-01
6                                               B91-16
Name: col_1, dtype: object

感谢@Dark的改进!