我想为每个组分配一个编号。我尝试做
df['group_n'] = df.groupby('ID').ngroup()
但它给了我一个错误消息:
设置复制警告: 尝试在 DataFrame 的切片副本上设置一个值。 尝试使用 .loc[row_indexer,col_indexer] = value 代替 请参阅文档中的警告:https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
如果我这样做,df['group_n'] = df.groupby('ID').ngroup().add(1)
我按降序排列_n(即C:3、B:2、A:1),有没有办法保留该顺序但让group_n从0开始?
我当前的表:
ID date sender
C Jan20 3
C Feb20 7
C Mar20 12
C Apr20 15
B Mar20 1
B May20 10
B Jun20 15
...
A Jan21 10
A Feb21 12
A Mar21 20
A Apr21 5
所需表格:
ID date sender group_n
C Jan20 3 1
C Feb20 7 1
C Mar20 12 1
C Apr20 15 1
B Mar20 1 2
B May20 10 2
B Jun20 15 2
A Jan21 10 3
A Feb21 12 3
A Mar21 20 3
A Apr21 5 3
提前谢谢您!
最佳答案
用途:
df['group_n'] = pd.factorize(df['ID'])[0] + 1
或者:
df['group_n'] = df.groupby('ID', sort=False).ngroup().add(1)
print(df)
ID date sender group_n
A Jan20 3 1
A Feb20 7 1
A Mar20 12 1
A Apr20 15 1
B Mar20 1 2
B May20 10 2
B Jun20 15 2
C Jan21 10 3
C Feb21 12 3
C Mar21 20 3
C Apr21 5 3
关于python - 如何为每个ID分配一个组号(n=1,2,3.....)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70827209/