作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的原始 CSV 文件如下所示
1, 9
2, 8
3, 9
14, 7
15, 6
19, 8
20, 9
21, 3
我将 A 列中的连续整数表分组为
for grp, val in df.groupby((df.diff()-1).fillna(0).cumsum().index1):
print(val)
结果表:
A B
1 1 9
2 2 8
3 3 9
A B
14 14 7
15 15 6
A B
19 19 8
20 20 9
21 21 3
实际上,B 值是很长的 ID 号,但作为数字来说微不足道。如何创建一个新的 C 列,通过为每个 ID 分配一个简单值,并为组中的每个重复项分配相同的简单值,来显示三个组中每组中的模式?
期望的输出:
A B C
1 1 9 1
2 2 8 2
3 3 9 1
A B C
14 14 7 1
15 15 6 2
A B C
19 19 8 1
20 20 9 2
21 21 3 3
谢谢
最佳答案
你很接近
df['C']=df.groupby((df.A.diff()-1).fillna(0).cumsum()).B.apply(lambda x : pd.Series(pd.factorize(x)[0]+1)).values
df
Out[105]:
A B C
0 1 9 1
1 2 8 2
2 3 9 1
3 14 7 1
4 15 6 2
5 19 8 1
6 20 9 2
7 21 3 3
或者使用类别
df['C']=df.groupby((df.A.diff()-1).fillna(0).cumsum()).B.apply(lambda x : x.astype('category').cat.codes+1).values
df
Out[110]:
A B C
0 1 9 2
1 2 8 1
2 3 9 2
3 14 7 2
4 15 6 1
5 19 8 2
6 20 9 3
7 21 3 1
如果你需要for循环
for x,df1 in df.groupby((df.A.diff()-1).fillna(0).cumsum()):
print(df1.assign(C=pd.factorize(df1.B)[0]+1))
A B C
0 1 9 1
1 2 8 2
2 3 9 1
A B C
3 14 7 1
4 15 6 2
A B C
5 19 8 1
6 20 9 2
7 21 3 3
关于python - 如何在 DataFrame 中创建一个新列来显示不同列中的模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47985340/
我是一名优秀的程序员,十分优秀!