根据特定条件在新列中创建增量值



我有一个数据框架:

Name Rank  Months
A     'A3'  2
A     'A3'  2
A     'A2'  3
A     'A2'  3
A     'A2'  3
B     'A1'  4
B     'A1'  4
B     'A1'  4
B     'A1'  4
C     'A3'  2
C     'A3'  2
C     'A2'  1

根据特定Name的月数和Rank条件创建具有增量值的新列的最有效方法是什么?所以基本上输出如下:

Name Rank  Months  NewIncremental
A     'A3'  2       'P4'
A     'A3'  2       'P5'
A     'A2'  3       'P1'
A     'A2'  3       'P2'
A     'A2'  3       'P3'
B     'A1'  4       'P1'
B     'A1'  4       'P2'
B     'A1'  4       'P3'
B     'A1'  4       'P4'
C     'A3'  2       'P2'
C     'A3'  2       'P3'
C     'A2'  1       'P1'

条件就是秩序,A1->A2->A3。这意味着如果有一个排名为A2的名称,我将分配较低的增量值。我想基于这个排序会有帮助吧?

编辑:编辑的顺序,所以我需要提供任意顺序的排名

一种方法:

ranks = df.sort_values(by=["Rank"],
key=lambda x: x.str.replace(r"D+", "", regex=True).astype(int))
.groupby("Name").transform("cumcount") + 1
ranks = ranks.apply("P{}".format)
df["NewIncremental"] = ranks
print(df)

Name Rank  Months NewIncremental
0     A   A1       2             P1
1     A   A1       2             P2
2     A   A2       3             P3
3     A   A2       3             P4
4     A   A2       3             P5
5     B   A1       4             P1
6     B   A1       4             P2
7     B   A1       4             P3
8     B   A1       4             P4
9     C   A3       2             P2
10    C   A3       2             P3
11    C   A2       1             P1

一步一步

# sort df by the given criteria, then group-by
sorted_by_rank = df.sort_values(by=["Rank"], key=lambda x: x.str.replace(r"D+", "", regex=True).astype(int))
# get the ranks and apply the expected format
ranks = sorted_by_rank.groupby("Name").transform("cumcount") + 1
ranks = ranks.apply("P{}".format)
# assign the new column
df["NewIncremental"] = ranks
print(df)

这能解决你的问题吗?

df['NewIncrement'] = 'P' + df.sort_values(['Name', 'Rank']).groupby('Name').rank(method="first", ascending=True).astype(int).astype(str)

您可以简单地使用rank:

df["new"] = "P"+df.groupby("Name")["Rank"].rank(method="first").astype(int).astype(str)
print (df)
Name  Rank  Months new
0     A  'A1'       2  P1
1     A  'A1'       2  P2
2     A  'A2'       3  P3
3     A  'A2'       3  P4
4     A  'A2'       3  P5
5     B  'A1'       4  P1
6     B  'A1'       4  P2
7     B  'A1'       4  P3
8     B  'A1'       4  P4
9     C  'A3'       2  P2
10    C  'A3'       2  P3
11    C  'A2'       1  P1

相关内容

  • 没有找到相关文章

最新更新