我有一个关于清理凌乱数据的简单问题。我有一个通过电子邮件发送给我的数据集,其中包含多个列,每个列都包含逗号分隔的数字字符串。传统上,这些数字中的每一个都应该是它自己的变量,但这并不是这些数据集给我的方式。以下是一些数据的示例:
indication treatment
1,2 3
2 2,1
1,3 2,3
请想象这些数据集包含近100个这些列和数千行,以及每个列中不同数量的变量。我的目标是导入这样的数据集,然后拆分每个列,使得字符串中的每个变量都在它自己的列中,但每个列的拆分方式是每个唯一变量都被分类到它自己的列中。像这样:
indication_1 indication_2 indication_3 treatment_1 treatment_2 treatment_3
1 1 0 0 0 1
0 1 0 1 1 0
1 0 1 0 1 1
请注意,列标题已更改,数值列为二进制0或1,其中1表示存在变量。
我遇到了问题,因为我一直在尝试的拆分功能要求我知道我需要多少列,然后在拆分后不要将变量排序到各自的列中。它变得非常复杂,并且要求我为包含字符串的每个单独的列编写单独的代码。
Id就像一个可以获取包含字符串的列的函数,将数据拆分为单独的排序列,使这些列成为二进制是或否,然后更改列名以指示原始列名和变量in那一栏。我喜欢这个适用于任何数据列,所以我不必重写或修改单个列的功能(假设所有列都是带有字符标题的数字字符串)。
提前致谢。
答案 0 :(得分:3)
我们可以执行a = df2[df2.A.diff().shift(-1).ffill() >= 2]
#same as
a = df2[df2.A.diff().shift(-1).ffill().ge(2)]
print (a)
A B C
1 2 5 3
2 7 8 16
,然后使用strsplit
获取频率
mtabulate