skyhouse 发表于 2023-1-25 08:31:08

如何找出dataframe带规律的数值

在pandas的dataframe中需要把数值行的后两位(00)去掉,然后提取数值中带两个相同数的数值出来,进行累加。
比如300,其中有2个0; 113其中有2个3;55其中有两个5;131其中有两个1; 2440带两个4;这种类型的数值
本想把数值先去掉后两位,然后切片再对比,总是做不出来。弄了一个晚上,老报错,麻烦大神给个方法,有代码最佳。

感谢,祝新年快乐,心想事成。

文件无法上传,链接去了前面的H-TTPS,否则没权限

编码        数值
1        30000
2        100
3        200
4        100
5        100
6        11300
7        3600
8        100
9        200
10        100
11        100
12        100
13        100
14        500
15        7300
16        3200
17        3500
18        100
19        100
20        100
21        800
22        500
23        500
24        2300

pan.baidu.com/s/19S5XnJWPY0GsakpEdgGRQg
码:fek7

ZhKQYu 发表于 2023-1-27 09:54:54

看不明白是啥问题,能否再说的详细一些

sfqxx 发表于 2023-5-19 23:48:49

为了实现这个功能,您可以遵循以下步骤:

1. 读取csv文件并创建一个名为"df"的dataframe对象。

import pandas as pd

df = pd.read_csv('your/path/to/the/file.csv', encoding='utf-8')
2. 去掉数值行的后两位(00)。

df['编码'] = df['编码'].apply(lambda x: int(str(x)[:-2]))

3. 从每个数字中提取出带有相同数字的数字,并将它们累加到“count”列中。


def count_repeated_digits(number):
    s = str(number)
    for c in s:
      if s.count(c) >= 2:
            return sum(int(i) for i in s if i == c)
    return 0
    df['count'] = df['编码'].apply(count_repeated_digits)
4. 按升序排序数据框,并以"count"列为首要条件(在相同时使用数字的顺序作为次要条件),重新分配索引号。

df = df.sort_values(['count', '编码']).reset_index(drop=True)
5. 打印新的数据框。
print(df)

完整代码应该是这样的:

import pandas as pd

df = pd.read_csv('your/path/to/the/file.csv', encoding='utf-8')
df['编码'] = df['编码'].apply(lambda x: int(str(x)[:-2]))

def count_repeated_digits(number):
    s = str(number)
    for c in s:
      if s.count(c) >= 2:
            return sum(int(i) for i in s if i == c)
    return 0

df['count'] = df['编码'].apply(count_repeated_digits)
df = df.sort_values(['count', '编码']).reset_index(drop=True)

print(df)
页: [1]
查看完整版本: 如何找出dataframe带规律的数值