先附上文件:

https://ply.lanzoui.com/ipRH4sctyle

处理要求:

model中有重复的名字,对应的year是递增的。

需要修改第一次出现的model对应的year为year最小-year最大

思考方向:

一开始我是从行开始处理的,因为要求修改指定的行,其他不能修改!我tm也是第一次碰到这种变态的要求,但没想到这个方向处理起来无比困难。难点在于以下几点:

1.要保证model的名字要一致,虽然是递增的规律,如果单独处理year难免会遇到刚刚好递增的时候。

2.其他行不能删除,行遍历很难形成判定条件

3.这次实践没有任何回报!

后面,我重新做了一下思考

单纯的获取最开始重复的行索引和最后的行索引,马上就可以确定year的最小和最大值了

之后,就直接处理开始重复时的最早的索引,对指定的进行修改就行了!

难点就在于用循环获取需要修改的索引时候,要有一个对应获取最大值的一个函数。

代码:

按照常规操作,我们读取这个文件

df = pd.read_excel('hh.xlsx')
df.head()

我们将分批讲解!

x = df
model = x['model']
make = df['make']
makex=make.copy()
modelx = model.copy()
year = x['year']
yearx = year.copy()
m1 = modelx.drop_duplicates(keep='first')
m2 = modelx.drop_duplicates(keep='last')

在这里,我要说明的是,这复杂的copy是为了避免那个人的。。要求,如果没有copy操作,会打印出警告,但不影响结果。

获取了model和year,make这里是需要获取的,最后拼接用,这个获取就行。。对新手好康一点

m1和m2分别是model最开始重复的索引和最后重复的索引

def min(i):
    ymin = yearx[i]
    return str(ymin)
def max(i):
    l = []
    maxl = []
    for k in m1.index:
        l.append(k)
    for j in m2.index:
        maxl.append(j)
    ymax = yearx[maxl[l.index(i)]]
    return str(ymax)

这里是获取最小的year和最大的year后面要做拼接处理!

我知道写的很low,但是写法对小白,新手来说,可读性还是可观的。

for i in m1.index:
    yearx[i] = min(i)+"-"+max(i)
r = pd.concat([makex,modelx,yearx],axis=1)
r.head()   
print("处理完成")

因为只需要修改最小的重复时候的行的year值,我们对m1进行遍历,通过min和max获取了最大和最小值

进行修改,之后拼接,完成了处理。

保存:

r.to_csv('87.csv')
print("处理完成")  

我想说:

这个提出该要求的人我也不知道脑子咋想的,为啥不去直接删去重复的内容,合并最小-最大呢?

所以我在这里放出了代码。。。。

max和min还是用的到的

import pandas as pd
df = pd.read_excel('hh.xlsx')
df.head()
import pandas as pd
df = pd.read_excel('hh.xlsx')
model = df['model']
make = df['make']
year = df['year']
yearx = year.copy()
m1 = model.drop_duplicates(keep='first')
m2 = model.drop_duplicates(keep='last')
make = make.drop_duplicates(keep = 'first')
yearlist = []
for i in m1.index:
    yearlist.append(min(i)+"-"+max(i))
yearlist = pd.DataFrame(yearlist)
r = pd.concat([m1.reset_index()['model'],yearlist],axis=1)
r.to_csv('87.csv')
print("处理完成")
Last modification:February 5, 2022
如果觉得我的内容对你有用,请随意赞赏