繁体   English   中英

通过在 pandas 中的每个组中添加以 1 开头的数字,在 dataframe 中添加新列

[英]Add new column in dataframe by adding number beginning by 1 in each groups in pandas

我有一个 dataframe,例如:

COL1      COL2 
Group_234 1
Group_234 2
Group_234 3
Group_234 4
Group_89  5
Group_89  6
Group_232 7
Group_232 8
Group_232 9

如何为每个COL1组添加一个COL3 ,我开始一个以 1 开头的新组编号? 并且还更改COL4中的COL2值,其中我在每个新的COL3组中从 1 开始,例如:

COL1      COL2 COL3    COL4 
Group_234 1    Group_1 1
Group_234 2    Group_1 2
Group_234 3    Group_1 3
Group_234 4    Group_1 4
Group_89  5    Group_2 1
Group_89  6    Group_2 2
Group_232 7    Group_3 1
Group_232 8    Group_3 2
Group_232 9    Group_3 3

利用:

print (df)
         COL1  COL2
0   Group_234     1
1   Group_234     2
2   Group_234     3
3   Group_234     4
4    Group_89     5
5    Group_89     6
6   Group_232     7
7   Group_232     8
8   Group_232     9
9   Group_234    10 <-difference if repated same groups values
10  Group_234    11 <-difference if repated same groups values

您可以通过比较列COL1与累计总和的差异来计算连续值,然后将此值用于GroupBy.cumcount的计数器:

df['COL3'] = 'Group_' + df['COL1'].ne(df['COL1'].shift()).cumsum().astype(str)

#alternative if not consecutive counts
df['COL31'] = 'Group_' + df.groupby('COL1', sort=False).ngroup().add(1).astype(str)

df['COL4'] = df.groupby('COL3').cumcount().add(1)

#alternative if not consecutive counts
df['COL41'] = df.groupby('COL1').cumcount().add(1)
print (df)
         COL1  COL2     COL3    COL31  COL4  COL41
0   Group_234     1  Group_1  Group_1     1      1
1   Group_234     2  Group_1  Group_1     2      2
2   Group_234     3  Group_1  Group_1     3      3
3   Group_234     4  Group_1  Group_1     4      4
4    Group_89     5  Group_2  Group_2     1      1
5    Group_89     6  Group_2  Group_2     2      2
6   Group_232     7  Group_3  Group_3     1      1
7   Group_232     8  Group_3  Group_3     2      2
8   Group_232     9  Group_3  Group_3     3      3
9   Group_234    10  Group_4  Group_1     1      5
10  Group_234    11  Group_4  Group_1     2      6

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM