我想根据一列数据打上序号,上下相同数据打相同序号?
我想根据一列数据打上序号,上下相同数据打相同序号,不同数据序号+1,写了好久写不出来,有没有人教一下。
想要这样的效果
回答:
这样?
import numpy as npimport pandas as pd
df = pd.DataFrame({
'data': [11, 21, 24, 24, 24, 24, 25, 25, 26, 26, 26, 26, 23, 26, 26, 26, 26, 20, 26, 26, 26, 26],
'nums': 0,
})
df['nums'] = np.cumsum(df['data'].diff() != 0)
print(df)
结果:
data nums0 11 1
1 21 2
2 24 3
3 24 3
4 24 3
5 24 3
6 25 4
7 25 4
8 26 5
9 26 5
10 26 5
11 26 5
12 23 6
13 26 7
14 26 7
15 26 7
16 26 7
17 20 8
18 26 9
19 26 9
20 26 9
21 26 9
回答:
import pandas as pdimport random
random.seed(10)
df=pd.DataFrame(
{
"Time":pd.date_range("2022-9-1 15:25:55",periods=40,freq="s"),
"postiveVol":[random.randint(20,23) for _ in range(40)]
}
)
sno=[]
temp=df.postiveVol.tolist()
for i,v in enumerate(temp):
if i==0:
sno.append(1)
elif v==temp[i-1]:
sno.append(sno[-1])
else:
sno.append(sno[-1]+1)
df["序号"]=sno
print(df)
回答:
def cacu(): df1 = {"postiveVol":[1,3,3,23,32,34,34]}
my_list = df1["postiveVol"]
my_list.sort()
if(len(my_list) <= 0):
return
pre = my_list[0]
base = 1
output = []
for v in my_list:
if(pre != v):
base +=1
output.append(base)
pre = v
print(list(zip(my_list,output)))
[(1, 1), (3, 2), (3, 2), (23, 3), (32, 4), (34, 5), (34, 5)]
def cacu():
df1 = {"postiveVol":[1,3,3,23,32,34,34]}
my_list = df1["postiveVol"]
my_list.sort()
swap = dict(Counter(my_list))
#print(swap)
output = []
for v in swap:
base = 1
for in_v in range(1,swap[v]+1):
#print(in_v)
output.append(in_v)
print(list(zip(my_list,output)))
#print(output)
cacu()
[(1, 1), (3, 1), (3, 2), (23, 1), (32, 1), (34, 1), (34, 2)]
以上是 我想根据一列数据打上序号,上下相同数据打相同序号? 的全部内容, 来源链接: utcz.com/p/938606.html