鱼C论坛

 找回密码
 立即注册
查看: 3149|回复: 2

[已解决]如何找出dataframe带规律的数值

[复制链接]
发表于 2023-1-25 08:31:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在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

最佳答案
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"列为首要条件(在相同时使用数字的顺序作为次要条件),重新分配索引号。

[code]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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-1-27 09:54:54 | 显示全部楼层
看不明白是啥问题,能否再说的详细一些
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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"列为首要条件(在相同时使用数字的顺序作为次要条件),重新分配索引号。

[code]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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-23 03:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表