这是一个困难的问题,而不是一个设计问题。我不是在寻找代码,仅仅是为了了解如何在熊猫中执行以下操作。我先显示数据,然后是问题
数据:
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
更新:现在我做了,我添加了我的方法作为答案
答案 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)