Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 单元格中的顺序字符串序列_Python_String_Pandas - Fatal编程技术网

Python 单元格中的顺序字符串序列

Python 单元格中的顺序字符串序列,python,string,pandas,Python,String,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行 这些不同代码在一行中的顺序无关紧要。就我的目的而言

我在数据框的一列中有以下数据:

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
如果要按字典顺序对这些内容进行排序,请使用逗号分隔,然后使用
np.sort

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


选项2
按逗号拆分并调用
应用
+
排序

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的改进

不清楚您要如何对其进行排序。按字典顺序?您说需要在数据帧中进行排序,以获得每个数据帧的准确计数。你的最终目标是什么?计数任务通常不涉及排序,这就是为什么这可能很重要的原因。感谢您指出@COLDSPEED遗漏的细节(我认为我的示例就足够了)。是的,我想按字典顺序排序,但这不是完全必要的。关键是要确保如果两个序列是“a,b”和“b,a”,那么这两个序列将被转换为相同的顺序,以便它们被标识为相同的。@jpp:最终目标是减少建模功能的级别数。就我的目的而言,“a,b”和“b,a”在功能上是相同的,因此需要将它们标识为相同的级别。然而,在我的模型中,它们被编码为分类变量的唯一级别。此外,有数百种不同的级别,因此我想将它们减少到构成前90%的唯一值,然后是“其他”级别。为此,我需要一个频率分布,这需要计数。
collections.Counter(lst)
将为您提供
列表中每个不同项目的计数。它是O(n)复杂度,因此应该是有效的。这不会有帮助吗?如果不使用lambda可能:
df.col_1.str.strip(',')。str.split(',')。apply(sorted)。str.join(',')
@Dark Awesome,这当然更好。谢谢:)
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