Pandas有没有办法计算多年来的复制数量?

6za6bjd0  于 2023-01-24  发布在  其他
关注(0)|答案(2)|浏览(116)

不太清楚如何问这个问题,但我可以显示一个明确的前后,这将有所帮助。
我的数据如下所示:

temp_df = pd.DataFrame({'userID': [1, 3, 4, 3, 4, 3], 
                        'Year': [2020, 2020, 2021, 2021, 2022, 2022]})
temp_df

| 用户ID|年份|
| - ------|- ------|
| 1个|小行星2020|
| 三个|小行星2020|
| 四个|小行星2021|
| 三个|小行星2021|
| 四个|小行星2022|
| 三个|小行星2022|
我想创建一个用户ID的滚动计数,这样我就可以看到哪些用户ID仍然存在,以及存在了多长时间。
| 年份|去年的ID数|2年前的ID数|
| - ------|- ------|- ------|
| 小行星2020|无|无|
| 小行星2021|1个|无|
| 小行星2022|第二章|1个|
等等等等。
我不知道如何着手解决这个问题,所以我想最好还是问一问。

qhhrdooz

qhhrdooz1#

你想要的和你要求的不一样,所以我试着先解决你想要的:

df_analyze = temp_df.groupby(['userID']).Year.agg(['min', 'max'])
df_analyze['duration'] = df_analyze['max']-df_analyze['min']
print(df_analyze['duration'])

userID
1    0
3    2
4    1

您可以按用户ID分组,并获得用户ID的最小和最大年份,区别在于用户停留的时间。

klsxnrf1

klsxnrf12#

使用集合跟踪看到的ID:

s = temp_df.groupby('Year')['userID'].agg(set)

N = 2
df = (pd.DataFrame({f'n-{i}': [len(a&b) for a,b in zip(s, s.shift(i, fill_value=set()))]
                    for i in range(1, N+1)}, index=s.index)
        .reset_index()
      )

print(df)

输出:

Year  n-1  n-2
0  2020    0    0
1  2021    1    0
2  2022    2    1

相关问题