假设我有以下 df:
df = pd.DataFrame({'date': ['2019-01-21', '2019-01-21', '2019-01-22', '2019-01-21', '2019-01-22', '2019-01-22'],
'user_id': [1, 1, 1, 2, 2, 2],
'value': ['a', 'b', 'c', 'a', 'a', 'd']})
date user_id value
0 2019-01-21 1 a
1 2019-01-21 1 b
2 2019-01-22 1 c
3 2019-01-21 2 a
4 2019-01-22 2 a
5 2019-01-22 2 d
我想添加新列来表示每个 user_id 的唯一值计数以及截至该日期的日期。
即:对于每个用户和日期,计算唯一值的历史记录:user_id=1 在日期 2019-01-21 有 2 个唯一值(a、b),在日期 2019-01-22 有 3 个唯一值(a 和b 来自先前日期,c 来自当前日期)
我想得到以下 df 结果:
date user_id value unique_values_count
0 2019-01-21 1 a 1
1 2019-01-21 1 b 2
2 2019-01-22 1 c 3
3 2019-01-21 2 a 1
4 2019-01-22 2 a 1
5 2019-01-22 2 d 2
最佳答案
你可以这样做:
df['unique_values_count']=df.groupby('user_id')['value'].apply(lambda x: (~pd.Series(x).duplicated()).cumsum())
结果:
date user_id value unique_values_count
0 2019-01-21 1 a 1
1 2019-01-21 1 b 2
2 2019-01-22 1 c 3
3 2019-01-21 2 a 1
4 2019-01-22 2 a 1
5 2019-01-22 2 d 2
关于python - 每个日期的聚合数据帧值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70923950/