想处理下这个数据,一个有80万个点。从下图可以看到。 有13个地方 一部分数据大于3000。现在想写一个程序,找到这几个大于3000的地方。有可能每个地方不止一个点。找到后,把这个点前面4000个点和后面4000个点删掉。然后剩下的数据分别存成csv。举例,比如第10000个点的时候,大于3000,那么删掉第6000-14000的点,并保存0-6000的点为数据一,保存第14000到下一个大于3000的点往前数4000,为数据二。
数据集在这儿可以找到
链接:https://pan.baidu.com/s/1LUCnNJD6k4huSmmn-YQz2A
提取码:vfpv
问题看起来不复杂,就是数据量比较大,这里边有一个问题,就是假如点2在点1的前后4000范围内,那么是只删除点1的相关范围还是要扩展到点2的范围,比如点1坐标100,点2坐标120,那么向后要删除到4100,还是4120
按照不向后扩展的方式先给个答案,分割后是14段
import pandas as pd
df = pd.read_csv('Test.csv')
index = df[df['x']>3000].index
partindex = []
start = 0
for i in index:
if start<i:
partindex.append([start,i-4000])
start = i+4001
partindex.append([start, len(df.index)])
for i in range(len(partindex)):
pi = partindex[i]
dfi = df[pi[0]:pi[1]]['x']
dfi.to_csv('df'+str(i+1)+'.csv',index=None)
改成你的文件路径就行了,datagroup 是最后的分组类别
import pandas as pd
import numpy as np
path1='D:/Download/chromedownload/Test.csv' ##改成你的文件路径
df1=pd.read_csv(path1)
df2=df1[df1.x>3000]
del_id=[list(range(i-4000,i+4000)) for i in df2.index]
del_id=set(sum(del_id,[]))
df3=df1[~df1.index.isin(del_id)]
df3['id1']=df3.index
df3['id2']=df3.id1.shift(-1)-df3.id1
i=1
df3.loc[0,'datagroup']=i
for j in df3[df3.id2>1].index:
i=i+1
df3.loc[j,'datagroup']=i
df3=df3.fillna(method='ffill')
df3['datagroup']=df3.datagroup.apply(int)
df4=df3[['x','datagroup']]
print(df4)
#df4.to_csv(path1,index=0)