python - 枚举 DataFrame 中每个组的每一行

标签 python pandas dataframe running-count

在 pandas 中,我如何添加一个新列来枚举基于给定分组的行?

例如,假设有以下 DataFrame:

import pandas as pd
import numpy as np

a_list = ['A', 'B', 'C', 'A', 'A', 'C', 'B', 'B', 'A', 'C']
df = pd.DataFrame({'col_a': a_list, 'col_b': range(10)})
df
  col_a  col_b
0     A      0
1     B      1
2     C      2
3     A      3
4     A      4
5     C      5
6     B      6
7     B      7
8     A      8
9     C      9

我想添加 col_c这给了我基于 col_a 的分组的“组”的第 N 行和排序 col_b .

期望的输出:

  col_a  col_b  col_c
0     A      0      1
3     A      3      2
4     A      4      3
8     A      8      4
1     B      1      1
6     B      6      2
7     B      7      3
2     C      2      1
5     C      5      2
9     C      9      3

我正在努力去 col_c .您可以使用 .sort_index(by=['col_a', 'col_b']) 进行正确的分组和排序。 ,现在只需转到该新列并标记每一行。

最佳答案

cumcount ,对于这种情况:

df['col_c'] = g.cumcount()

正如文档中所说:

Number each item in each group from 0 to the length of that group - 1.


原始答案(在定义 cumcount 之前)。

您可以创建一个辅助函数来执行此操作:

def add_col_c(x):
    x['col_c'] = np.arange(len(x))
    return x

首先按col_a列排序:

In [11]: df.sort('col_a', inplace=True)

然后将此函数应用于每个组:

In [12]: g = df.groupby('col_a', as_index=False)

In [13]: g.apply(add_col_c)
Out[13]:
  col_a  col_b  col_c
3     A      3      0
8     A      8      1
0     A      0      2
4     A      4      3
6     B      6      0
1     B      1      1
7     B      7      2
9     C      9      0
2     C      2      1
5     C      5      2

为了得到1,2,...你可以使用 np.arange(1, len(x) + 1) .

关于python - 枚举 DataFrame 中每个组的每一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17228215/

相关文章:

python - 如何将 DataFrame 中另一列的简单值聚合到最小值?

python - 使用 pandas dataframe 根据不同级别的键范围从多索引行中进行切片的便捷方法

python计算到列中数字的距离

python - 查找 pandas 中用户定义窗口的平均值

python - 在 Pandas 数据框中查找常见单词

python - binascii.Error : Incorrect padding, 即使字符串长度是 4 的倍数

python - Flask-SQLAlchemy:CircularDependencyError,其中多对一关系中的同一行可以与同一个表存在一对多关系

python - 根据另一个单元格与另一个数据帧单元格的比较来更改一个数据帧中单元格的值 - pandas

python - 要插入数据框-pandas 中的选定行

r - 无法将数据框转换为h2o对象