python - Pandas - 通过将组中的重复项目视为新项目来对组内的项目进行排名

标签 python pandas

Dataframe 有两列(ColA 和 ColB)

 ColA   ColB
 123     A
 123     B
 123     C
 123     C
 123     D
 123     C
 123     C

 456     A
 456     B
 456     D
 456     D
 456     E

我想创建一个新列,通过将组内的重复项目视为新项目来在组内排名(例如:在组 123 中对项目 C 进行两次排名)。寻找应该像这样的解决方案:

ColA    ColB    ColC
 123     A       1
 123     B       2
 123     C       3
 123     C       3
 123     D       4
 123     C       5
 123     C       5

 456     A       1
 456     B       2
 456     D       3
 456     D       3
 456     E       4

谢谢

最佳答案

你可以这样做:

df['ColC'] = df.groupby('ColA')['ColB'].transform(lambda x:(x!=x.shift()).cumsum())

>>> df
    ColA ColB  ColC
0    123    A     1
1    123    B     2
2    123    C     3
3    123    C     3
4    123    D     4
5    123    C     5
6    123    C     5
7    456    A     1
8    456    B     2
9    456    D     3
10   456    D     3
11   456    E     4

关于python - Pandas - 通过将组中的重复项目视为新项目来对组内的项目进行排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52447141/

相关文章:

python - 将 pandas DataFrame 列附加到 CSV

python - 像数据库表一样标准化 Pandas DataFrame

python - 平均后图像全灰

python - Kubernetes Python Pod分析

python - `eli5.show_weights` 显示的标准偏差与`feature_importances_std_`中的值不一致

python - 当两个数据帧具有完全相同的列和索引时,如何通过匹配另一个数据帧上的条件来对一个数据帧的数据进行分组?

python - 基于列值 reshape Pandas 数据框

Python:当为变量分配新内容时, "old"内存是否已释放?

Python 本地最小值/最大值,而 bin 没有改变

python - 如何在多列上重新采样并创建 value_counts() 和 count() 的时间序列?