第一次X发生了

时间:2014-04-30 12:58:12

标签: python pandas

这是一个困难的问题,而不是一个设计问题。我不是在寻找代码,仅仅是为了了解如何在熊猫中执行以下操作。我先显示数据,然后是问题

数据:

             category          
year   group                                                                           
1983     722     1001
1983     722     1003  
1984     722     1001  
1984     721     1002  

我有一个包含小组年观察的数据集。通常,每个小组每年都有一些单位。这些单位有类别。我想在组年级创建一个指标,显示第一次第一次创建具有该类别的单位时。

我认为更好的预期输出将是数据库

year   group  newCategory                                                                    
1983     722         1001
1984     722         1003
1984     721         1002

更新:现在我做了,我添加了我的方法作为答案

2 个答案:

答案 0 :(得分:0)

假设您使用了我在评论中提到的新列,您可以执行类似这样的操作,以便在每次首次出现新类别时获取标记。

s = set()
df['newcat'] = df.category.apply(lambda c: 0 if (c in s or s.add(c)) else 1)

答案 1 :(得分:0)

对于后世来说,这就是我最终要做的事情。我决定反对字典方法,因为如果没有遍历行,我无法想象如何做到这一点,这将是非常低效的。

def computeIndicators(group):
    # group is year-group 
    return pd.DataFrame(sub['category'].unique(), columns={'category'})

def computeInitialIndicators(group):
    # group is group-category 
    return group['year'].min()

results = patents.groupby(level=[0,1]).apply(computeIndicators)
results = results.reset_index().drop('level_2', 1).sort(['group', 'year'])
results2 = results.groupby(['group', 'category']).apply(computeInitialIndicators)