|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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
为了实现这个功能,您可以遵循以下步骤:
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. 打印新的数据框。
完整代码应该是这样的:
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)
|
|