让我们说我有一个像这样的数据框
id phone_number
0 5555555555
1 9082345324
2 2345098345
我想用一个简单的说法或一种简洁的说法:
输出应如下所示:
id phone_number
1 9082345324
2 2345098345
我的方法是使用iterrows()
,并将每个电话号码的每个数字都放入列表中,然后使用lst[1:] == lst[:-1]
交叉比较列表以查看所有数字是否相同。如果是这样,请从DF中删除该行。我只想要一个更干净的解决方案
答案 0 :(得分:4)
您可以使用set
并检查长度
df[df.phone_number.apply(set).str.len().gt(1)]
id phone_number
1 1 9082345324
2 2 2345098345
等同于理解力
df[[len({*x}) > 1 for x in df.phone_number]]
如果这些是实际整数
df[df.phone_number.astype(str).apply(set).str.len().gt(1)]
# df[[len({*str(x)}) > 1 for x in df.phone_number]]
进一步的项目符号校对,假设其中可能没有数字
df[df.phone_number.astype(str).replace('\D', '').apply(set).str.len().gt(1)]
答案 1 :(得分:1)
首先,将电话号码转换为字符串(如果尚未转换)。然后,您需要检查电话号码中第一个character
的出现次数。如果与电话号码的长度匹配,则应删除该记录。
df.phone_number = df.phone_number.apply(str)
df = df.loc[~df['phone_number'].apply(lambda x: x.count(x[0]) == len(x))]
输出:
id phone_number
1 1 9082345324
2 2 2345098345