Python 返回组中的第一次出现

标签 python string pandas list min

我一直在寻找一种方法来找到基于组的一系列行中的第一次出现。

首先,我检查并为每个组应用了一个“组”计数器。然后我想将状态下第一个“已售出”的 ID 作为新列返回,并将其应用于整个组。

示例如下。 Final_ID 是要创建的新列。

group  ID   status  Final_ID
1      100  view    103
1      101  show    103
1      102  offer   103
1      103  sold    103
1      104  view    103
2      105  view    106
2      106  sold    106
2      107  sold    106
3      108  pending 109
3      109  sold    109
3      110  view    109
4      111  sold    111
4      112  sold    111
4      113  sold    111
4      114  sold    111

我试过用

df = pd.DataFrame ({'group':['1','1','1','1','1','2','2','2','3','3','3','4','4','4','4'], 
                    'ID':['100','101','102','103','104','105','106','107','108','109','110','111','112','113','114'],
                    'status':['view','show','offer','sold','view','view','sold','sold','pending','sold','view','sold','sold','sold','sold']
                    })


df2=df[( df.status=='sold')][['group','ID']].groupby('group'['ID'].apply(min).reset_index()

df2=df.merge(df2, on='group' , how='left')

但我不确定这是解决问题的正确方法。还有其他想法吗?

最佳答案

状态出售的地方屏蔽您的ID系列,然后将您的组分组并转换 first,它为每个组选择第一个非 NaN 值,在本例中是 sold

的第一次出现
df['ID'].mask(df['status'] != 'sold').groupby(df['group']).transform('first').astype(int)

0     103
1     103
2     103
3     103
4     103
5     106
6     106
7     106
8     109
9     109
10    109
11    111
12    111
13    111
14    111
Name: Final_ID, dtype: int32

关于Python 返回组中的第一次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57482571/

相关文章:

python - python(numpy)中的自动数组演算

java - 从字符串中收集字符并将其转换为整数

python - 设置行索引并查询具有多索引列的 Pandas 数据框

python - 根据 pandas 中的列和条件对值进行分组

Python TooManyRedirects : Exceeded 30 redirects

python - 将 Flask 项目部署到 Heroku 时出现 "Install dependencies with pip"异常

c - recv() 函数不读取输入(套接字编程)

java - 从 HTML 源中提取字符串

python - 如何用 Pandas 数据框中的 ASCII 替换非 ASCII

python - 用 map 组合函数