python - Pandas 获取每组条件第一次出现的列值

标签 python pandas lambda group-by apply

我有一个 pandas 数据框,如下所示:

player  condition   num
A       0           1
A       1           2
A       1           3
B       0           1
B       0           2
B       1           3
B       0           4

我想添加一个列来存储 num 列的最小值,其中每个 玩家 条件 列为 1

因此,结果应如下所示:

player  condition   num  numCondition
A       0           1    2
A       1           2    2
A       1           3    2
B       0           1    3
B       0           2    3
B       1           3    3
B       0           4    3

我知道每个玩家需要一个groupBy()。然后,我将需要一个可能使用 lambda() 函数的 apply() 。但我还无法将这些碎片拼凑在一起。

编辑:条件列是我的示例中的简化。实际上,应该可以使用常用的 pandas 数据帧查询来过滤行。例如。 df[(df.condition == 1) & (df.otherCondition > 10)]

最佳答案

通过使用drop_duplicates

df.player.map(df[df.condition==1].drop_duplicates(['player'],keep='first').set_index('player').num)
    Out[221]: 
    0    2
    1    2
    2    2
    3    3
    4    3
    5    3
    6    3
    Name: player, dtype: int64

df['numCondition']=df.player.map(df[df.condition==1].drop_duplicates(['player'],keep='first').set_index('player').num)
df
Out[223]: 
  player  condition  num  numCondition
0      A          0    1             2
1      A          1    2             2
2      A          1    3             2
3      B          0    1             3
4      B          0    2             3
5      B          1    3             3
6      B          0    4             3

关于python - Pandas 获取每组条件第一次出现的列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46624323/

相关文章:

c++ - 在 lambda 函数语法中, 'capture list' 有什么用途?

python - 使用 python 创建绘图,同时将 excel 数据分离到新文件

python - numpy 数组中沿值轴的逐元素计数

python - 具有原始规范 Python 的模拟类

python - 根据另一个数据集中的元素位置过滤 pandas 数据帧的快速方法

python - 将 pandas Series 作为新列添加到特定 Dataframe 行

c# - 删除使用 lambda 表达式添加的 eventHandler

Python3 ctypes c_unit32 字节序

python-2.7 - 根据列中的 True 值过滤行 - python pandas dataframe

c++ - 分配给 lambda 的 std::function 访问冲突