首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pandas:具有扩展应用和条件的Groupby

pandas:具有扩展应用和条件的Groupby
EN

Stack Overflow用户
提问于 2019-08-24 04:04:07
回答 1查看 142关注 0票数 2

我想对一列进行扩展min,同时遵循基于另一列的条件:

代码语言:javascript
复制
df = pd.DataFrame({'_id': ['a','a', 'a', 'a', 'a'], 
                   'account': [1,2,3,2,5], 
                   'status':[3, 1, 5, 2, 7]})

  _id  account  status
0   a        1       3
1   a        2       1
2   a        3       5
3   a        2       2
4   a        5       7

这些行按照从最旧到最新的时间顺序排列,并在用户_idaccount进行status更改时显示。因此,在这里我们可以看到,用户a在某个时间点将account 2标记为status 1,然后将该值更新为2

我需要一个status_hist列来显示a所有帐户的全局状态,其中全局状态被定义为所有现有状态的状态。在索引0处只有一个状态,因此status_hist是3,在索引1处现在有两个状态,status_hist是1,依此类推。当我们索引3时,全局状态应该从1更改为2,因为status account 2现在已经更改了。

我可以使用df.itertuples()很容易做到这一点,但如果有更快的方法,我希望避免这样做。以下是itertuples的解决方案,如果它有助于澄清我想要的是什么:

代码语言:javascript
复制
df2 = pd.DataFrame()

for _, group in df.groupby('_id'):
    res = []
    statuses = defaultdict()
    for row in group.itertuples():
        statuses[row.account] = row.status
        res.append(min(statuses.values()))

    group['status_hist'] = res
    df2 = df2.append(group)

这就给出了:

代码语言:javascript
复制
  _id  account  status  status_hist
0   a        1       3            3
1   a        2       1            1
2   a        3       5            1
3   a        2       2            2
4   a        5       7            2

如果你能帮上忙,谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-24 04:56:47

您可以在“account”列上使用get_dummies,乘以“values”中的状态。然后使用mask将0替换为nan,以便能够对每个'_id‘组执行ffill操作,以便最终将min覆盖如下所示的列:

代码语言:javascript
复制
df_dummies = pd.get_dummies(df.account)*df.status.values[:,None]
df['status_hist'] = df_dummies.mask(df_dummies.eq(0)).groupby(df._id).ffill().min(axis=1)
print (df)
  _id  account  status  status_hist
0   a        1       3          3.0
1   a        2       1          1.0
2   a        3       5          1.0
3   a        2       2          2.0
4   a        5       7          2.0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57632400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档