依熊猫位数筛选

时间:2020-06-07 20:39:09

标签: python pandas

我有一个Dataframe,只有一列,数字范围为1到10000000000。

    df1 = 
165437890
2321434256
324334567
4326457
243567869
234567843
 ......
7654356785432
7654324567543

我想要一个结果Dataframe,它只有9位数字的数字,并且这些数字彼此不同,这可能吗?我对如何开始一无所知

OBS: 1)我需要过滤出重复数字的数字

例如:

122234543从我的DataFrame中消失,因为它的数字2重复了3次,数字43重复了2次

2 个答案:

答案 0 :(得分:2)

def is_good(num):
    numstr = list(str(num))
    if len(numstr) == 9 and len(set(numstr))==9:
       return True
    return False

    df1[df.apply(is_good)]

答案 1 :(得分:2)

flt = (df.Numbers >= 100000000) & (df.Numbers < 1000000000)
df = pd.DataFrame(df[flt]['Numbers'].unique())

Numbers是带有您的数字的列名。


数字本身彼此不同的数字的解决方案:

df.Numbers = df.Numbers.astype('str')
df = df[df.Numbers.str.match(r'^(?!.*(.).*\1)[0-9]{9}$')]

或基于Igor答案的另一种解决方案:

def has_unique_9digits(n):
    s = str(n)
    return len(s) == len(set(s)) == 9
df = df[df.Numbers.apply(has_unique_9digits)]