python - 根据 pandas 中每个排序组的第一行创建一列

标签 python python-3.x pandas pandas-groupby

我想根据两列对数据框进行分组,并根据另一列对每个组进行排序,然后根据每个组的第一行为每个组创建新列!(col3 是我的数据集中的日期)

数据框:

col1            col2         col3
A               0            2.0
A               0            1.0
A               0            3.0
A               1            3.0
A               1            4.0
B               0            3.0
B               0            1.0
B               1            1.0
B               1            1.0

输出:

col1            col2         col3           col4
A               0            2.0        1.0
A               0            1.0        1.0
A               0            3.0        1.0
A               1            3.0        3.0
A               1            4.0        3.0
B               0            3.0        1.0
B               0            1.0        1.0
B               1            0.0        0.0
B               1            1.0        0.0

我尝试过这个:

active_users = active_users.groupby(['col1', 'col2']).apply(lambda x: x.sort_values('col3')).transform('first')

并收到此错误:

TypeError: first() missing 1 required positional argument: 'offset'

最佳答案

您可以使用以下方式创建此类列:

df['col4'] = df.groupby(['col1', 'col2'])['col3'].transform('min')

因为排序项的第一个值是最小值。通常,最好在排序列表的第一项上使用最小值,因为计算最小值可以在 O(n) 内完成。对于排序,它取决于算法本身,因为有惰性排序算法有时也可以获得 O(n) 中的第一个元素,但我认为 'min'更清楚地表明您的目标是什么。

对于给定的示例数据帧,我们将获得:

>>> df = pd.DataFrame({'col1': ['A']*5 + ['B']*4, 'col2': [0,0,0,1,1,0,0,1,1], 'col3': [2,1,3,3,4,3,1,0,1.0]})
>>> df
  col1  col2  col3
0    A     0   2.0
1    A     0   1.0
2    A     0   3.0
3    A     1   3.0
4    A     1   4.0
5    B     0   3.0
6    B     0   1.0
7    B     1   0.0
8    B     1   1.0
>>> df['col4'] = df.groupby(['col1', 'col2'])['col3'].transform('min')
>>> df
  col1  col2  col3  col4
0    A     0   2.0   1.0
1    A     0   1.0   1.0
2    A     0   3.0   1.0
3    A     1   3.0   3.0
4    A     1   4.0   3.0
5    B     0   3.0   1.0
6    B     0   1.0   1.0
7    B     1   0.0   0.0
8    B     1   1.0   0.0

关于python - 根据 pandas 中每个排序组的第一行创建一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58155773/

相关文章:

python - 无法理解 Jupyter 笔记本 ("Learning Cython"中的输出)

python - 获取数组中从右上角到左下角的所有对角线

python - tkinter:为什么图像无法正确显示

python - Pandas :错误计算行数

python - 对数据帧的每一行应用函数并同时递增计数器

python - dict __getitem__ 会创建相应对象的副本吗?

Python - 在指定时间内循环 100 次

python - 在 MoviePy 中混合音频文件

python - 使用 fileinput 替换文件中的多个字符串

python - Pandas 按自定义功能分组