加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – Pandas:枚举索引中的重复项

发布时间:2020-12-20 11:08:09 所属栏目:Python 来源:网络整理
导读:假设我有一个在不同键上发生的事件列表. data = [ {"key": "A","event": "created"},{"key": "A","event": "updated"},{"key": "B",{"key": "C",]df = pandas.DataFrame(data) 我想首先在键上索引我的DataFrame,然后是枚举.它看起来像一个简单的unstack操作,
假设我有一个在不同键上发生的事件列表.

data = [
    {"key": "A","event": "created"},{"key": "A","event": "updated"},{"key": "B",{"key": "C",]

df = pandas.DataFrame(data)

我想首先在键上索引我的DataFrame,然后是枚举.它看起来像一个简单的unstack操作,但我无法找到如何正确地执行它.

我能做的最好的是

df.set_index("key",append=True).swaplevel(0,1)

          event
key            
A   0   created
    1   updated
    2   updated
    3   updated
B   4   created
    5   updated
    6   updated
C   7   created
    8   updated
    9   updated
    10  updated
    11  updated
    12  updated

但我期待的是

event
key            
A   0   created
    1   updated
    2   updated
    3   updated
B   0   created
    1   updated
    2   updated
C   0   created
    1   updated
    2   updated
    3   updated
    4   updated
    5   updated

我也尝试了类似的东西

df.groupby("key")["key"].count().apply(range).apply(pandas.Series).stack()

但订单未保留,因此我无法将结果应用为索引.此外,我觉得看起来非常标准的操作有点过分了……

任何的想法?

解决方法

groupby cumcount

以下是几种方法:

# new version thanks @ScottBoston
df = df.set_index(['key',df.groupby('key').cumcount()])
       .rename_axis(['key','count'])

# original version
df = df.assign(count=df.groupby('key').cumcount())
       .set_index(['key','count'])

print(df)

             event
key count         
A   0      created
    1      updated
    2      updated
    3      updated
B   0      created
    1      updated
    2      updated
C   0      created
    1      updated
    2      updated
    3      updated
    4      updated
    5      updated

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读